**GNU Privacy Guard** หรือที่เรียกว่า **GnuPG** หรือ **GPG** เป็นโปรแกรมในการเข้ารหัสข้อมูล เพื่อป้องกันการบุกรุกทางข้อมูลและเพื่อทำให้ข้อมูลนั้นมีความปลอดภัยมากขึ้น

GnuPG เป็นโปรแกรมที่ออกแบบมาเพื่อใช้งานแทนทื่โปรแกรม PGP หรือ Pretty Good Privacy เนื่องจาก PGP นั้นมีข้อจำกัดเรื่องสัญญาอนุญาตและสิทธิบัตรซอฟต์แวร์
โดย GnuPG ใช้มาตรฐาน RFC 4880 ของ IETF ซึ่งเป็นมาตรฐานของ OpenPGP โดยรุ่นล่าสุดของ PGP นั้นสามารถทำงานร่วมกับ GnuPG และระบบอื่น ๆที่เป็น OpenPGP ได้ ซึ่งในตัวเวอร์ชันเก่าของ PGP ไม่สามารถสนับสนุนการทำงานของโปรแกรมได้ทั้งหมด

GPG เป็นโปรแกรมที่พัฒนาโดย Free Software Foundation โดยได้รับเงินทุนสนับสนุนจากรัฐบาลของประเทศเยอรมัน ภายใต้เงื่อนไขของเวอร์ชันที่ 3 ของ GNU General Public License ดังนั้นจึงทำให้ GPG เป็นซอฟต์แวร์เสรีที่สามารถแจกจ่ายแก้ไขดัดแปลงได้โดยเสรี

ประวัติ
-------

GnuPG นั้นพัฒนาขึ้นโดย Werner Koch โดยเวอร์ชัน 1.0.0 นั้นถูกปล่อยออกมาเมื่อวันที่ 7 สิงหาคม ค.ศ 1999 (พ.ศ. 2542)
และได้รับทุนสนับสนุนจากกระทรวงเศรษฐกิจและเทคโนโลยีของประเทศเยอรมัน
ในการทำคู่มือการใช้งาน ทำให้สามารถใช้ในไมโครซอฟท์วินโดวส์ในปี ค.ศ. 2000

เนื่องจาก GnuPG นั้นเป็นระบบที่ทำตามมาตรฐานของ OpenPGP ดังนั้นประวัติของ OpenPGP นั้นจึงสำคัญต่อ GnuPG โดย OpenPGP ถูกออกแบบมาให้ทำงานร่วมกันกับ PGP ซึ่งเป็นโพรโทคอลที่ใช้ในการเข้ารหัสอีเมลล์ที่พัฒนาขึ้นโดย Phil Zimmerman

GnuPG เวอร์ชัน 2.0 ถูกปล่อยออกมาเมื่อวันที่ 13 พฤศจิกายน ค.ศ. 2006 ซึ่งพัฒนามาจากเวอร์ชัน 1.x โดยเวอร์ชันสุดท้ายของรุ่น 1.x คือ 1.4.8 นั้นยังคงมีการพัฒนาต่อควบคู่กันกับ GnuPG 2.0 เนื่องจากมีการเปลี่ยนแปลงในสถาปัตยกรรมของโปรแกรม ซึ่งไม่เหมาะกับการใช้งานในบางประเภท

การใช้งาน
---------

  

GnuPG นั้นเป็นโปรแกรมที่เสถียรและมีคุณภาพระดับนำไปใช้งานจริง สามารถใช้งานได้กับทุกระบบปฏิบัติการ โดยโปรแกรมนี้มักรวมไปกับระบบปฏิบัติการเสรี เช่น FreeBSD, OpenBSD, NetBSD และระบบปฏิบัติการลีนุกซ์เกือบทุกรายก็ว่าได้

GnuPG สามารถคอมไพล์ได้กับทุกระบบปฏิบัติการ แต่การคอมไพล์ข้ามระบบปฏิบัติการนั้นยังคงมีความยุ่งยากอยู่บ้าง เนื่องจากในแต่ละระบบปฏิบัติการนั้นมีระบบป้องกันความปลอดภัยแตกต่างกัน การปรับให้ทำงานด้วยกันได้ค่อนข้างทำได้ยาก คอมไพเลอร์ที่มีคุณภาพสูง ๆ ควรจะสร้างโปรแกรมซึ่งทำงานเข้ากับ GnuPG ในระบบปฏิบัติการอื่นๆ GnuPG มีการคอมไพล์เรียบร้อยแล้วสำหรับระบบปฏิบัติการที่เป็นที่นิยม เช่น ไมโครซอฟท์วินโดวส์ และ Mac OS X

แม้ว่าโดยพื้นฐานของโปรแกรม GnuPG นั้นเป็นเพียงแค่การทำงานบน command line interface ธรรมดา แต่ในส่วนของ front-end นั้นจะมีส่วนติดต่อผู้ใช้แบบกราฟิก (GUI) มาให้ เพื่อใช้ติดต่อกับ GnuPG เช่น การรองรับการเข้ารหัสของ GnuPG นั้นถูกรวมเข้าในโปรแกรม KMail และ Evolution ซึ่งเป็นโปรแกรมอ่านอีเมลบน KDE และ GNOME ของลีนุกซ์ ส่วนในระบบปฏิบัติการ Mac OS X ก็มี front-end Aqua สำหรับการเข้ารหัสและจัดการกับ key พร้อม ทั้งมีโปรแกรมติดตั้ง (installer) ของ GnuPG มาให้ แอปพลิเคชันจำพวก instant messanging เช่น Psi และ Fire สามารถเข้ารหัสข้อความอัตโนมัติถ้าเครื่องมีการติดตั้ง GnuPG ไว้แล้วแล้ว มีปลั๊กอิน Enigmail สำหรับมอซิลลาทันเดอร์เบิร์ดและ SeaMonkey และมีปลั๊กอิน Enigform กับ FireGPG รองรับ มอซิลลาไฟร์ฟอกซ์

ในปี ค.ศ. 2005 G10 Code และ Intevation ได้ปล่อย Gpg4win ซึ่งเป็นชุดของโปรแกรมที่ประกอบด้วย GnuPG บน WinPT, Gnu Privacy Assistant (PGA) และ GnuPG plugin สำหรับ Window Explorer และ Outlook โดยอยู่ในรูปโปรแกรมติดตั้ง สามารถนำมาใช้กับระบบปฏิบัติการวินโดวส์ได้เกือบทุกระบบในปัจจุบัน

การทำงาน
--------

GnuPG จะทำการเข้ารหัสข้อความโดยการใช้กุญแจอสมมาตร (asymmetric key) 1 คู่ ซึ่งจะถูกสร้างขึ้นมาโดยผู้ใช้งาน GnuPG ซึ่ง public key ที่ได้นั้นสามารถแลกเปลี่ยนกับผู้ใช้คนอื่น ๆ ได้ด้วยวิธีต่าง ๆ กัน เช่น internet key server โดย public key นั้นจะต้องมีการแลกเปลี่ยนกันอย่างระมัดระวังเพื่อป้องกันการแก้ไขความสัมพันธ์ระหว่าง public key กับเจ้าของ สามารถเพิ่มลายเซ็นดิจิทัล (digital signature) ไปกับข้อความด้วยเพื่อเป็นการรับรองให้แน่ใจได้ว่าข้อความดังกล่าวมาจากผู้ที่ต้องการติดต่อด้วยจริง และไม่มีการถูกปลอมแปลงหรือแก้ไขโดยบุคคลอื่น ถ้าหากไม่ประสงค์จะเข้ารหัสข้อความนั้น

GnuPG นั้นปราศจากข้อจำกัดเรื่องสิทธิบัตรซอฟต์แวร์ นั่นคือ GnuPG ไม่ได้ทำการเข้ารหัสด้วยอัลกอลิทึมหรือซอฟต์แวร์ที่มีแบบแผน รวมถึงอัลกอลิทึมการเข้ารหัสของ IDEA ซึ่งเป็นรูปแบบที่รวมอยู่ใน PGP ตั้งแต่เริ่มแรกแล้ว แต่จะใช้อัลกอลิทึมที่ไม่ปัญหาเรื่องสิทธิบัตร เช่น CAST5, Triple DES, AES, Blowfish และ Twofish
แต่ยังสามารถที่จะใช้ IDEA ใน GnuPG โดยการดาวน์โหลดปลั๊กอินมา ซึ่งจะต้องขอลิขสิทธิ์การใช้ที่ถูกต้องด้วยหากใช้งานในประเทศที่สิทธิบัตรของ IDEA มีผลบังคับใช้

GnuPG เป็นโปรแกรมเข้ารหัสแบบผสม ซึ่งใช้การเข้ารหัสแบบกุญแจสมมาตร (symmetric key) เพื่อช่วยให้มีความเร็วในการเข้ารหัส และกุญแจสาธาระณะ(public key) มาช่วยในการแลกเปลี่ยนกุญแจ โดยการใช้ public key ของผู้รับเพื่อใช้ในการเข้ารหัสใน session key ซึ่งจะใช้เพียงแค่ครั้งเดียว การทำงานแบบนี้เป็นส่วนหนึ่งของมาตรฐานของ OpenPGP และเป็นส่วนหนึ่งของ PGP ตั้งแต่เวอร์ชันแรก

ปัญหา
-----

มาตรฐานของ OpenPGP นั้นกำหนดให้ใช้ลายเซ็นดิจิทัล (digital signature) ได้หลายแบบ ในปี ค.ศ. 2003 มีความตั้งใจเพื่อที่จะทำให้การทำลายเซ็นดิจิทัลแบบหนึ่งใน GnuPG ซึ่งมีประสิทธิภาพและความปลอดภัยมากยิ่งขึ้น แต่เกิดข้อผิดพลาดในการเปลี่ยนแปลงทำให้ GnuPG มีช่องโหว่ทางความปลอดภัย โดยจะมีกระทบกับรูปแบบของการส่งข้อความที่ใช้ลายเซ็นดิจิทัลเพียงแค่รูปแบบเดียว ซึ่งจะเป็นเพียงแค่ GnuPG เวอร์ชัน 1.0.2 ถึง 1.2.3 เท่านั้น และมี key ที่มีปัญหาน้อยกว่า 1000 key ลายเซ็นดิจิทัลรูปแบบนี้เป็น แบบที่ไม่นิยม จึงทำให้เกิดความเสียหายน้อย และรูปแบบดังกล่าวก็ถูกลบจาก GnuPG ในเวอร์ชันตั้งแต่เวอร์ชัน 1.2.4 เป็นต้นไป ปัญหาอีกอย่างอย่างที่พบในต้นปี ค.ศ. 2006 นั้นก็คือ ปัญหาแรกคือการตรวจสอบสายเซ็นโดยใช้ GnuPG ผ่าน script อาจทำให้ผลออกมาว่าลายเซ็นถูกต้องทั้งที่ไม่ควรที่จะเป็น ปัญหาที่สองคือข้อความที่ไม่ใช้ MIME มีการเพิ่มข้อมูล จะรายงานว่าเป็นส่วนหนึ่งของข้อความที่เซ็นแล้วด้วย ปัญหาทั้งสองก็ประกาศออกมาพร้อมกับ GnuPG ที่ปรับปรุงแล้ว

GnuPG เป็นระบบแบบ command line ที่ไม่ได้เขียนให้เป็น API ที่สามารถจะทำงานร่วมกับซอฟต์แวร์ตัวอื่นได้ มี GPGME ที่ทำตัวเป็น API wrapper โดยตีความผลลัพธ์จาก GnuPG และยังมีการสร้าง front end แบบกราฟิกหลายตัวด้วย วิธีนี้ทำให้ต้องเรียกโปรแกรม GnuPG สำหรับการเรียกใช้ API ของ GPGME แต่เนื่องจาก GPGME ได้นำอินเทอร์เฟสของ GnuPG ที่ออกแบบมาโดยเฉพาะสำหรับให้โปรแกรมติดต่อซึ่งกันและกัน จึงทำให้ API มีความเสถียร ปัญหาในเรื่องความปลอดภัยก็ยากที่จะเกิดขึ้นเนื่องจากปัญหาในโปรแกรมประยุกต์จะไม่กระทบถึงโค้ดการเข้ารหัสถอดรหัสจริง เนื่องอยู่คนละ process กัน

ตัวอย่างคำสั่งในโปรแกรม
-----------------------

gpg --gen-key ใช้สร้าง keypair ขึ้นมา 1 ชุด เลือกได้ว่าจะทำเป็น DSA หรือ RSA และ กำหนดอายุของ key ชุดนี้ การกำหนดอายุของ key ช่วยป้องกันการ brute force ได้ด้วย

gpg -s เพื่อ ใส่ลายเซ็นดิจิตัลใน file นั้นๆ

gpg -e -r name (doc) ใช้สำหรับเข้ารหัส file ที่ต้องการ

gpg -d name ใช้สำหรับถอดรหัส file นั้นออกมา

gpg -f name ใช้สำหรับดู ลายนิ้วมือ (Fingerprint) ว่าถูกต้องหรือไม่

gpg -import name ใช้นำkey ที่ได้รับมาจากผู้ที่ติดต่อด้วยไปเก็บไว้ใน public key ring

gpg --output name.gpg -export name ใช้นำ key ออกจาก ไปเก็บไว้ใน output ที่ต้องการ

ตัวอย่างการใช้โปรแกรมในการติดต่อกันระหว่างผู้ใช้
------------------------------------------------

ถ้า A ต้องการติดต่อกับ B

1.เริ่มแรกให้ทำการสร้าง key ขึ้นมา 1 คู่เพื่อใช้ในการติดต่อ

```
gpg --gen-key
```

โดย key ที่สร้างขึ้นมาได้จะมี Pub คือ กุญแจสาธารณะ (public key) กับ uid คือกุญแจส่วนตัว (private key)

2.นำ key ที่ได้ไปเก็บไว้ยังไฟล์ที่ต้องการจะส่งไปให้ B

```
gpg --output name -export keyid 
```

มีการแลกเปลี่ยน key กัน โดยสามารถทำผ่านทาง key server หรือ ส่ง Email(จดหมายอิเล็กทรอนิก)ก็ได้

```
gpg --send-keys KeyID
```

3. B ไป download key จาก key server หรือจาก email ที่ได้รับ แล้วนำไปเก็บไว้ใน public key ring เพื่อใช้ในการถอดรหัสข้อความที่ถูกเข้าได้ public key

```
gpg -import name
```

B สามารถตรวจสอบ fingerprint ของ A ได้โดยคำสั่ง

```
gpg -f name
```

4.A ทำการเข้ารหัสข้อความด้วย key ที่สร้างไว้ จากนั้นส่งข้อความที่เข้ารหัสแล้วไปให้ B

```
gpg -e -r name doc
```

5.B ได้รับข้อความและถอดรหัสออกมาดูได้ด้วย private key ที่ได้รับมาจาก A

```
gpg -d name
```

อ้างอิง
-------

* GnuPG 2.0 releases Werner Koch, November 13, 2006
* GnuPG's ElGamal signing keys compromised Werner Koch, November 27, 2003
* A Short History of the GNU Privacy Guard Werner Koch, December 20, 2007