Public Key Cryptography .. เทคโนโลยีกุญแจสาธารณะ

ค้างไว้มานานเลยกับ cryptography ภาคสอง วันนี้จะมาแนะในส่วนของ public key cryprography ล่ะครับ เทคโนโลยีของ public key cryptography กำลังเป็นที่สนใจเอามาใช้งานกันในปัจจุบันเพื่อแก้ปัญหาความปลอดภัยหลายๆ อย่าง เอาล่ะครับ มาลองดูกันก่อนว่ามันมาได้ยังไง แล้วปัจจุบันเราใช้มันทำอะไรบ้าง

Public Key Cryptography ต่างจาก cryptography แบบเดิมๆ อย่างไร ?

การ เข้ารหัสในอดีตที่ผ่านมาจะอาศัยข้อมูลที่เก็บเป็นความลับที่เรียกว่า “กุญแจ” หรือ “Key” …กุญแจตัวนึงจะใช้ทั้งเวลาที่เข้ารหัสและถอดรหัสเราเรียกการเข้ารหัสแบบ นี้ว่า “secret key cryptography” หรือ “symmetric key cryptography” เพราะว่าตัวกุญแจใช้งานทั้งเข้าและถอดรหัส และต้องเก็บเป็นความลับ รู้กันเฉพาะคนเข้ารหัสข้อมูลและผู้รับข้อมูล หลักการนี้เข้าใจได้ง่าย ใช้กุญแจไหนเป็นตัวล๊อคก็ใช้ตัวนั้นไขเอาล๊อกออก นอกจากนี้ยังใช้งานง่ายด้วยบนคอมพิวเตอร์เพราะโดยทั่วไป ตัวเลขสุ่ม (random number) ก็เอามาใช้เป็นกุญแจได้ การใช้เลขสุ่มยังทำให้กุญแจมีความปลอดภัยอีกด้วย

ส่วน public key cryptography จะมีกุญแจสองดอก คือ private key ซึ่งจะเก็บเป็นความลับมีเจ้าของคนเดียวเท่านั้นที่รู้ และอีกอันคือ public key ซึ่งไม่จำเป็นต้องเก็บเป็นความลับ ทั้งสองตัวจะใช้งานต่างกันคือ ถ้าใช้กุญแจอันนึงเข้ารหัส จะต้องใช้กุญแจอีกตัวนึงที่เข้าคู่กันในการถอดรหัส เอาให้เห็นภาพอีกหน่อย..สมมติว่ามี public key A กับ private key B เป็นกุญแจที่เข้าคู่กัน ถ้าเอา A เข้ารหัส จะมีแต่ B เท่านั้นที่ถอดรหัสนั้นออก และในทางกลับกันถ้าใช้ B เป็นตัวเข้ารหัสก็จะมีแต่ A เท่านั้นที่จะถอดรหัสได้ การที่มีกุญแจสองแบบทำให้ public key cryptography ได้เปรียบ secret key cryptography ตรงที่ผู้รับกับผู้ส่งใช้กุญแจคนละตัวกัน ไม่จำเป็นต้องรู้ความลับของกันและกันก็สามารถส่งข้อมูลหากันได้อย่างปลอดภัย

กำเนิด Public Key Cryptography

Public key cryptography เกิดจากหลักคณิตศาสตร์ที่เรียกว่า ฟังก์ชันทางเดียว (one-way function) กลุ่มของฟังก์ชันทางเดียวส่วนหนึ่งมีความเกี่ยวข้องกับเลขจำนวนเฉพาะ (prime number) เลขที่หารได้เฉพาะ 1 และตัวมันเอง

คุณสมบัตินี้เกี่ยวกับ ฟังก์ชันทางเดียวได้ยังไง ? ..ลองดูนะครับ ถ้าเอาเลขจำนวนเฉพาะสองตัวมาคูณกัน สมมติเป็น 5 กับ 7 ได้ 35 .. ทีนี้ลองหาตัวประกอบของ 35 ดูสิครับ เราจะได้ว่ามีเพียง 5 และ 7 เท่านั้นที่เป็นตัวประกอบ (ไม่นับ 1×35 นะครับ) ทีนี้ลองหาอีกซักจำนวนนึง 11,927 x 20,903 คำตอบคือ 249,310,081 ..การคูณ 11,927 กับ 20,903 นี้ง่ายกว่าหาตัวประกอบของ 249,310,081 ใช่มั้ยครับ ? ยิ่งเลขจำนวณเฉพาะมีค่ามากเท่าไหร่ยิ่งจะแยกตัวประกอบยากขึ้นเท่านั้น ทีนี้นึกออกยังครับว่ามันเกี่ยวอะไรกับ public key ? ..ใบ้อีกหน่อยสมมติว่า 249,310,081 เป็นข้อมูลที่เราได้รับและถ้าเรารู้จำนวนเฉพาะตัวนึง เราจะหาอีกตัวนึงได้อย่างง่ายดาย แต่ถ้าเราไม่รู้ล่ะก็กว่าจะหาได้ก็นานทีเดียว..ใช่แล้ว คุณสมบัตินี้สามารถเอามาใช้เก็บความลับได้ !!

แนวคิดเรื่อง public key ไม่ได้เป็นของใหม่ครับ คนแรกที่คิดเรื่องนี่คือ วิธฟีิลด์ ดิฟฟี่ (Whitfield Diffie) และ มาร์ติน เฮลแมน (Martin Hellman) ซึ่งเสนอวิธีการแบบ public key นี้ใน National Computer Conference ปี 1976 และตีพิมพ์ใน IEEE Transaction on Information Theory หลังจากนั้นไม่กี่เดือนต่อมา algorithm ที่ทั้งสองคิดขึ้นมา อธิบายได้เป็นฉากๆ ตามนี้ครับ

ก่อนอื่นให้ A และ B กำหนดค่า n และ g โดยที่ 1 < g < n ..เลขทั้งสองไม่จำเป็นต้องเป็นความลับ

A สุ่มเลขที่มีค่ามากๆ มาตัวนึง กำหนดให้เป็นค่า x และหาค่า X = gx mod n เก็บค่า x เป็นความลับ

B ทำเหมือนกัน สุ่มเลขที่มีค่ามากๆ มาตัวนึง กำหนดให้เป็นค่า y และหาค่า Y = gy mod n เก็บค่า y เป็นความลับ

ทีนี้ A กับ B แลกค่า X และ Y กัน

A คำนวณหาค่า k = Yx mod n

B คำนวณหาค่า k’ = Xy mod n

ค่า k และ k’ จะมีค่าเท่ากัน และเท่ากับ gxy mod n

ค่า k และ k’ ที่ว่านี้นอกจาก A และ B แล้วคนอื่นไม่มีทางหาได้เพราะค่าที่คนอื่นมีโอกาสรู้มีเพียง n, g, X และ Y โอกาสที่จะหาค่า x จาก X (หรือ y จาก Y) ทำได้ด้วยการหา inverse ของ X ซึ่งเรียกว่า discrete logarithm และเจ้า discrete logarithm นี่ไม่ได้คำนวณกันง่ายๆ ครับ…ไม่เชื่อลอง..3x mod 17 = 15 ลองหา x ดูสิครับ…ถ้าหาได้ลองอีกตัวนึง 3x mod 13 = 7 .. หาได้มั้ยเอ่ย ? อ้อ..ผมลืมบอกไป discrete logarithm บางทีจะไม่มีคำตอบนะครับ เหอะๆๆๆ

OK.. ว่ากันต่อ..หลังจาก Diffie-Hellman เสนอวิธีการของ public key ได้ไม่นานนักก็เกิด RSA cryptosystem ซึ่งตีพิมพ์โดย รอน ริเวสต์ (Ron Rivest), อาดิ ชาร์เมียร์ (Adi Shamir), และ เลียวนาร์ด เอเดิลแมน (Leonard Adleman) ในปี 1978 ความปลอดภัยของ algorithm นี้ขึ้นกับความยากในการแยกตัวประกอบของเลขจำนวนเฉพาะที่มีค่ามากๆ

RSA Cryptosystem

Public Key:

n คำนวณจากเลขจำนวนเฉพาะสองตัว p และ q คูณกัน – ทั้ง p และ q ต้องเก็บเป็นความลับ ปกติจะทำลายทิ้งหลังจากหา key ได้เพราะไม่ได้ใช้ในการเข้า/ถอดรหัส

e เป็นจำนวนที่ไม่มีตัวประกอบร่วมกับ (p-1)(q-1)

Private Key: d = e-1(mod(p-1)(q-1))

Encrypting: c = me(mod n)

Decrypting: m = cd(mod n)

ทั้ง สามคิดว่าวิธีการนี้ปลอดภัยมากและเชื่อว่าต้องใช้เวลานับล้านปีกว่าจะแยก ตัวประกอบของเลขจำนวน 129 หลักออกไม่ว่าจะใช้คอมพิวเตอร์ที่ทรงพลังขนาดไหนก็ตาม ปัญหาการแยกตัวประกอบ 129 ตัวนี้เป็นที่รู้จักกันดีในวงการนักคณิตศาสตร์และคอมพิวเตอร์ว่า “RSA 129” เลขที่ว่านี้คือ “114 381 625 757 888 867 669 235 779 967 146 612 010 218 296 721 242 362 562 561 842 935 706 935 245 733 897 830 597 123 563 958 705 058 989 075 147 599 290 026 879 543 541” เลขนี้ตีพิมพ์เป็นปริศนาในคอลัมน์ Mathematical Games ใน Scientific American โดย มาร์ติน การ์ดเนอร์ ในปี 1977 (ก่อน RSA จะตีพิมพ์) ..ไม่มีใครในยุคนั้นสามารถหาคำตอบได้เลยจนกระทั่งในปี 1993 จึงมีคนพยายามแก้ปริศนานี้อีกครั้ง พอล เลย์แลนด์ (Paul Leyland), ไมเคิล กราฟฟ์ (Michael Graff) และ ดิเรค แอตกินส์ (Derek Atkins) เป็นผู้ที่พยายามจะแก้ปัญหานี้โดยได้รับการสนับสนุนจากอาสาสมัครมากกว่า 600 คนทั่วโลกให้ run โปรแกรมที่เขียนโดย เค. เลนสตรา (K. Lenstra) ในเวลากลางคืนเพื่อช่วยกันหาคำตอบผ่านทางอินเทอร์เน็ตในที่สุดในเดือนเมษายน ปี 1994 ปริศนาก็ถูกแก้ออกเป็นเลขจำนวนเฉพาะขนาด 64 และ 65 หลักคือ “3 490 529 510 847 650 949 147 849 619 903 898 133 417 764 638 493 387 843 990 820 577” กับ “32 769 132 993 266 709 549 961 988 190 834 461 413 177 642 967 992 942 539 798 288 533” และยังถอดรหัสออกมาเป็นข้อความได้ว่า “The magic words are Squeamish and Ossifrage” เรื่องนี้สอนให้รู้ว่า 129 หลักยังไม่ปลอดภัยพอ และ ไม่ควรคุยโอ้อวดเรื่องความปลอดภัยของการเข้ารหัส ปัจจุบันคาดกันว่าเลขขนาด 200 หลักจะต้องใช้เวลาซัก 52 ล้านปีเมื่อคำนวณประสิทธิภาพของคอมพิวเตอร์ที่เพิ่มขึ้นทุกๆ ปี แต่ใครจะกล้ายืนยันล่ะครับว่ามันปลอดภัยจริง ?? อย่างไรก็ตามปัจจุบัน RSA ใช้กุญแจเป็นตัวเลขขนาด 1024 bits (ประมาณ 309 หลัก) เป็นอย่างน้อย จึงยอมรับกันว่า RSA cryptosystem ปลอดภัยสูงพอ อย่างน้อยก็จนกว่าจะมีคนคิดวิธีแยกตัวประกอบได้ง่ายและเร็วกว่าวิธีที่มี ทั้งหมดในปัจจุบัน หรือไม่ก็จนกว่า cryptanalyst จะหาจุดอ่อนของ RSA ได้

ทำอะไรได้มั่งล่ะ เจ้า Public Key Cryptography เนี่ย ?

Public key cryptography นำมาประยุกต์ใช้ค่อนข้างกว้างทีเดียว จนอาจจะแก้ปัญหาของระบบความปลอดภัยได้ครบทั้ง 4 อย่างเลยด้วยซ้ำ (4 อย่างที่ว่านี้ก็มี Authentication, Integrity, Confidentialty, และ Non-repudiation) อย่างเช่น ใน secret key cryprography จะต้องมีการแลก secret key กันเพื่อให้ผู้รับสามารถถอดรหัสได้ หลายๆ โปรแกรมก็ใช้ Diffie-Hellman ในการแลก secret key เพราะจาก algorithm ของ Diffie-Hellman ค่า k และ k’ มีค่าเท่ากันและ secret key cryptography ใช้เลขสุ่มได้ ดังนั้นค่า k/k’ จะเป็นเท่าไหร่ก็ใช้เป็น key ได้เสมอ ส่วนการทำ Encryption โดยวิธีของ public key ก็จะทำงานตามนี้ครับ สมมติให้ A เป็นผู้ส่งและ B เป็นผู้รับ .. A จะเอา public key ของ B มาเข้ารหัสแล้วจึงส่งไปให้ B ..ข้อมูลที่ส่งไปจะมีก็เพียง B เท่านั้นที่จะถอดรหัสนั้นออกเพราะมี private key ที่เข้าคู่กับ public key ที่เป็นตัวเข้ารหัสส่งมา

public key cryptography สามารถนำมาประยุกต์ใช้เป็น digital signature ได้ด้วย .. ลายเซ็นดิจิตอลนี้เอาไว้ใช้ในกรณีที่เราต้องการตรวจสอบตัวตนที่แท้จริง (Identity verification) สมมติ A กับ B อีกรอบ.. A จะเข้ารหัสด้วย private key ของตัวเอง ขั้นตอนนี้เรียกกันว่า digital signing ข้อมูลที่ผ่าน digital signing แล้วก็จะส่งไปให้ B .. B สามารถตรวจสอบว่าข้อมูลมาจาก A ตัวจริงได้โดยการใช้ public key ของ A เป็นตัวถอดรหัส ถ้าสามารถถอดได้ก็มั่นใจได้ว่าข้อมูลนั้นมาจาก A จริงๆ เพราะมีแต่ public key ของ A เท่านั้นที่ถอดรหัสข้อมูลที่ sign โดย private key ของ A .. ทุกวันนี้ digital signature นิยมใช้กันมากขึ้นใน Internet (กระทรวงวิทย์ บ้านเราก็เริ่มเอามาใช้จริงๆ จังๆ แล้ว) เพื่อให้ยืนยันตัวตนที่แท้จริงได้ อย่างเช่น ใน SSL ก็จะมีการส่ง certificate ซึ่ง sign โดย digital signature เพื่อยืนยันว่าเป็นตัวจริงก่อนจะเริ่มต้นทำ transaction processing ใน Java ก็มี *.JAR ซึ่งมีการ sign ด้วย digital signature เหมือนกันเพื่อให้มั่นใจได้ว่า java code ใน JAR เป็นของแท้ วิธีเหล่านี้แต่เดิมก็สามารถทำได้โดยใช้ secret key cryptography แต่ไม่สะดวกนักเนื่องจากต้องมีการแลก key กันก่อน ซึ่งเป็นจุดอ่อนในการทำงาน การใช้ public key cryptography จะสะดวกกว่ามาก และให้ความปลอดภัยที่สูงกว่า.. อะไรก็ดีไปหมดนะเนี่ย ไม่มีข้อเสียเลยเหรอ ???..แน่นอนล่ะครับ มีได้ก็มีเสีย ข้อเสียของ public key cryptography คือความเร็วในการทำงานต่ำ อยู่ในช่วง 100 – 1000 เท่าของ secret key crptography เลยทีเดียว..โฮ้..ทำไมช้านักล่ะ..เหตุก็เพราะว่า Prime number generator ล่ะอย่างแรก .. การหาเลขจำนวนเฉพาะที่มีค่ามากๆ ต้องใช้วิธีการที่ยุ่งยาก และเสียเวลามาก มากจนหลายแอพพลิเคชั่นไม่หาจำนวนเฉพาะโดยตรงแต่ใช้การสุ่มตัวเลขแล้วทดสอบ ว่าเป็นเลขจำนวนเฉพาะหรือไม่แทน

สมการ exponential ในการเข้าและถอดรหัสก็เป็นเหตุผลนึงที่ทำให้ทำงานช้า เพราะตัวยกกำลังเป็นเลขที่มีค่าเยอะ ลองดูตัวอย่างกระจอกๆ นะครับ ให้ใช้เครื่องคิดเลขเลยเอ้า สมมติเป็น RSA ให้ p=47 q=71 คำนวณค่า n=3337 และ (p-1)(q-1)=3220 ค่า d = 1019 สุ่มค่า e = 79 .. โอ..สาหัสล่ะครับ เวลาเข้ารหัสใช้ m79 mod 3337 ..ถอดด้วย c1019 mod 3337 สมมติให้ m เป็นตัวอักษรรหัส ASCII เอาซัก 5 คำนี่ก็คำนวณกันมือหงิกแล้วครับ

Secret key cryptography จะใช้ operation ที่ซับซ้อนน้อยกว่าเยอะ อย่างพวก xor, shift จึงทำงานได้เร็วกว่า นอกจากนี้กุญแจก็สามารถใช้ random number ได้ หรือบาง algorithm อาจจะต้องใช้ secure random number แต่ก็ยังไม่ต้องคำนวณเยอะและมีเงื่อนไขมากเหมือน public key cryptography

หลายๆ แอพพลิเคชั่นจึงใช้ทั้ง public key และ secret key เวลาทำงานเพื่อจะได้ดึงจุดเด่นของเทคโนโลยีทั้งสองออกมาใช้กลบจุดด้อยของอีก อันนึง ปัจจุบันมี algorithm ที่เป็น public key cryptography มากมายนอกเหนือจาก Diffie-Hellman และ RSA แล้วก็ยังมี ElGamal, DSA, Knapsack, Rabin, Okamoto 92, Guam’s Cellular Automata, Elliptic Curve Cryptosystems ..อีกหลายอันเลยล่ะครับ อันไหนดีที่สุด ?? ..ตอบยากเหมือนกัน แต่ละอันก็มีคุณสมบัติต่างๆ กันไป สำหรับ public key cryptography ที่เป็นที่นิยมก็มี RSA ใช้ใน encryption และ digital signing เพราะ implement ง่าย ElGamal จะเหมาะกับ encryption ส่วน DSA ก็ดีที่การทำ Digital Signature (ตามชื่อของมัน DSA = Digital Signature Algorithm) และยังเป็นมาตรฐานที่ใช้กันในสหรัฐด้วย ส่วน Diffie-Hellman ยังใช้ในการแลกเปลี่ยน secret key เป็นหลัก

ที่ใช้งานกันจริงๆ ล่ะ ?

ปัจจุบันมีเยอะเหมือนกันครับ และอย่างที่บอกคือมักจะผสมกันทั้ง public และ secret key ผมยกตัวอย่างซัก 2-3 อันละกัน

Secure Shell (SSH) .. SSH เป็น protocol ที่แก้ปัญหาเรื่องความไม่ปลอดภัยในการ remote login เข้าใช้งาน service ต่างๆ อย่าง telnet, X11, และ r* command ต่างๆ, etc. เนื่องจาก service เหล่านี้เวลา login จะส่ง plaintext password ผ่านเครือข่าย ซึ่งทำให้ใครๆ ก็ดักจับได้ พอ password ถูกขโมยความเสียหายอื่นๆ ก็ตามมา .. SSH จึงเสนอทางแก้โดยให้มี encryption ระหว่าง client และ server ตั้งแต่เริ่มต้น connect ดังนั้นข้อมูลที่ส่งผ่านระหว่าง SSH client และ SSH server ก็จะปลอดภัย วิธีการของ SSH อนุญาตให้ตั้ง security algorithm/protocol ได้หลายตัวเช่น IDEA, Triple-DES, IDEA, ArcFour, Blowfish, และ Twofish .. algorithms พวกนี้เป็น secret key cryptography หมดเลย ดังนั้น Key จะแลกกันโดยใช้ Public Key Cryptography ช่วย .. ภายหลัง SSH สามารถทำเป็น tunnel สำหรับให้โปรแกรมอื่นใช้งานได้ด้วย และเมื่อไม่นานนี้เองก็มีความพยายามตั้ง SSH ให้เป็นมาตรฐานในอินเทอร์เน็ต ตอนนี้ SSH เข้าเป็น working group ของ Internet Engineering Task Force (IETF) แล้วและกำลังร่างมาตรฐาน (Internet Draft) เพื่อประกาศเป็นมาตรฐาน Request For Comment (RFC) กันต่อไป

SSL (Secure Socket Layer) .. SSL เริ่มมาจากบริษัท Netscape ที่ทำ browser นั่นแหละครับ ลักษณะของ SSL เรียกว่าเป็น security protocol ก็คือเป็นตัวให้บริการความปลอดภัยในการสื่อสารข้อมูล SSL เป็น protocol ที่ทำงานแทรกอยู่ระหว่าง application กับ transport layer (TCP) ปัจจุบันมี service มากมายที่ทำงานกับ SSL เช่น http, ftp, telnet, pop3, smtp หรือแม้แต่ VPN การทำงานของ SSL จะเริ่มจาก server ส่ง certificate เพื่อยืนยันตัวตนกับผู้ใช้ ขั้นตอนนี้เรียกว่า authentication certificate ที่ใช้กันเป็นมาตรฐาน X.509 จะรับรอง (ด้วย digital signature) โดยผู้ที่เชื่อถือได้เช่น US Post Service หรือถ้าเป็นบริษัทที่นิยมใช้ก็จะเป็นของ VeriSign ซึ่งต้องซื้อและมีราคาแพงตาม strength ของความปลอดภัย บางเจ้าขาย 500 certificates ในราคาแสนกว่าเหรียญ แต่ certificate เหล่านี้จะตรวจสอบตัวตนจริงๆ ได้ชัวร์สุดๆ สำหรับคนที่ไม่อยากจ่าย (อย่างผม..) ก็จะใช้วิธี self signing ในการสร้าง ceritifcate คือ เซ็นเองใช้เอง (อย่าง POP3S, SMTPS ของ gear/intania จะเป็น self signed certificate, HTTPS ของ secure.en.kku.ac.th ก็เช่นเดียวกัน)

หากผู้ ใช้ยอมรับ certificate นั้นโปรแกรมก็จะเริ่มตกลงกันว่าจะใช้ protocol อะไรในการเข้าและถอดรหัส ขึ้นกับว่าโปรแกรมและตัว SSL server รองรับได้ขนาดไหน อย่าง HTTPS ของ IE4 จะใช้ RC4 stream cipher เป็น secret key cryptography ขนาด 40-bit (ซึ่งแกะได้ด้วยเครื่องซูเปอร์คอมพิวเตอร์ความเร็วสูงๆ ได้ในเวลาวินาทีเดียว) หรือถ้าเป็น IE5 ก็จะเป็น 1024-bit RSA Public Key Encryption กับ MD5/RSA Digital Signature ส่วน Opera 3.6 รองรับ SSLv3.1 จะใช้ 1024-bit RSA Public Key Encryption กับ SHA/RSA Digital Signature

PGP (Pretty-Good Privacy) เป็น public-domain program ใช้ IDEA (International Data Encryption Algorithm) เป็น algorithm สำหรับ encryption ใช้ RSA สำหรับจัดการ key และใช้ MD5 (Message Digest v.5) สำหรับสร้าง hash วิธีการสร้าง key ของ PGP จะใช้ latency ในการพิมพ์ keyboard มาเป็นตัวหาเลขสุ่ม แล้วจึงเอาเลขสุ่มนี้ไปหา key อีกที ส่งที่น่าสนใจของ PGP คือการกระจาย public key ครับ ปกติแล้วการกระจาย public key จะเป็นหน้าที่ของ key certification authorities แต่สำหรับ PGP จะให้ผู้ใช้คนไหนก็ได้ sign (digital) กำกับลงใน public key ของผู้อื่น การตรวจสอบความน่าเชื่อถือของ key ก็จะดูจาก digital signature ว่าใครเป็นคน sign ตัวอย่าง เช่นฉาก A, B, C นะครับ

  1. A sign public key ของ B
  2. B ส่ง public key ให้ C เพื่อให้ C นำไปเข้ารหัสส่งข้อมูลกลับมาให้
  3. C จะตัดสินใจว่าจะรับ public key ของ B โดยดูว่าใครเป็นคน sign ให้ B ..ในที่นี้ก็คือ A .. หาก C เห็นว่า A ไว้ใจได้ น่าเชื่อถือพอ ก็จะรับ public key ของ b มาใช้งาน ถ้าไม่ไว้ใจก็จะปฏิเสธไป ทั้งหมดนี้เกิดขึ้นอย่างอัตโนมัตินะครับ หลายคนจะเรียกวิธีการนี้ว่า Web-of-Trust

อีกวิธีนึงคือการตรวจสอบ fingerprint ของ key วิธีนี้ใช้ในกรณีที่มีแค่สองคนแต่ทั้งสองคนต้องรู้จักกันมาก่อน หลักการก็คือ cross check กันตรงๆ เลย สมมติ A กับ B อีกครั้ง ในกรณีที่ B ได้รับ public key ของ A มาจาก server หรือแหล่งอื่นที่ไม่ได้มาจาก A โดยตรง, B สามารถตรวจสอบว่า key นั้นเป็นของ A จริงหรือไม่ได้ โดยให้ A ส่ง fingerprint ของ key มาเพื่อตรวจสอบกับ fingerprint ของ key ที่ได้รับมา หากว่าตรงกันก็แสดงว่า key ที่ได้รับมาเป็นของ A จริง วิธีการที่แนะนำใน PGP คือให้โทรศัพท์ถามกันเลยเพราะ fingerprint ทำเป็น biometric word ซึ่งเป็นคำภาษาอังกฤษธรรมดา ที่ต้องใช้เป็น fingerprint ก็เพื่อจะได้ไม่ต้องส่ง key มาเทียบกันจริงๆ ซื่งไม่ปลอดภัย แม้ว่า fingerprint จะถูกดักไปได้ระหว่างการตรวจสอบก็ไม่สามารถเอาไปหาย้อนกลับได้ว่าเป็น public key คืออะไร..อ่อ ผู้พัฒนา PGP คือ ฟิลลิป ซิมเมอร์แมนน์ (Philip Zimmermann) ครับ โชคร้ายที่ ดร.ซิมเมอร์แมนน์ พัฒนา PGP ในสหรัฐ เขาเลยถูก US Department of Commerce ฟ้อง เพราะกระทำผิดจากการ export software ที่อยู่ในข่ายของ Strong Cryptography (ขนาดของ key > 40 bits) ออกไปนอกสหรัฐ แต่ในที่สุดศาลสูงสุดของสหรัฐก็ตัดสินยกฟ้อง ปัจจุบันเพื่อเลี่ยงปัญหาเรื่องกฏหมายที่อาจจะเกิดขึ้นอีกจึงมีการก่อตั้ง International PGP ซึ่งเป็น PGP ที่ใช้ที่งานได้ทุกประเทศทั่วโลก

..มาถึงตอนจบ

คน ที่ใช้อินเทอร์เน็ตมานานพอจะทราบดีว่าอินเทอร์เน็ตเปลี่ยนไปมากขนาดไหน แล้วทำไมระบบความปลอดภัยถึงมีความสำคัญนัก แต่ก่อนเราไม่เคยคิดว่าอินเทอร์เน็ตจะมีผลกระทบต่อสังคมมากขนาดนี้ แม้แต่นักวิจัยเองก็ยังตกใจในความ “บูม” ของมัน ยิ่งเดี๋ยวนี้อินเทอร์เน็ตกลายเป็น พื้นที่ให้ใครๆ เข้าไปทำธุรกิจได้ ความสำคัญของความปลอดภัยก็เลยยิ่งมากขึ้นไปอีก ดังนั้นอย่าได้มองข้ามสิ่งเหล่านี้ไป สิ่งที่น่าจะกลับมาคิดอีกอย่างคือการสร้างนิสัยให้รู้จักระมัดระวังตัวมาก ขึ้นเวลาใช้งานอินเทอร์เน็ตเหมือนที่เคยเล่าให้ฟังในตอน อินเทอร์เน็ตสีเทานั่นล่ะครับ มันเป็นเทาแก่ขึ้นทุกวันๆ ถ้าไม่ป้องกันตัวเอง ไม่เปลี่ยนพฤติกรรมมันก็ลำบากแน่ครับ .. ใครที่เคยไม่สนใจเรื่องความปลอดภัย หันมาเริ่มต้นกันได้แล้วครับ เปลี่ยน telnet เป็น ssh, เพิ่มการสนับสนุน SSL ให้กับ pop3/smtp/http เพื่อรักษาข้อมูลสำคัญๆ ของบริษัท/องค์กร เท่านี้ก็ปลอดภัยขึ้นอีกเยอะแล้วครับ อย่าลืมว่าเราไม่ทำซักคนเดียวมันก็เป็นช่องโหว่ของระบบแล้ว..ช่วยๆ กันนะครับ ..Cyberspace จะได้เป็นโลกที่น่าอยู่ของทุกคน


References

  1. Schneier, B. “Applied Cryptography“, Wiley & Sons 1992
  2. PGP International, “Pretty Good Privacy“, URL: http://www.pgpi.com/
  3. Atkin D. et al. “Internet Security Professional Reference“, New Riders 1997
  4. many many many more …