การเข้ารหัสเบื้องต้น: Public-Private key encryption

บทความนี้เขียนเพื่อเป็นส่วนหนึ่งของความตระหนักต่อการเข้ารหัส
เพราะการเข้ารหัสไม่ใช่เรื่องไกลตัว

เคยมีความลับที่ไม่อยากบอกใครไหมครับ?
เคยนินทาเพื่อนด้วยโค้ดเนมย่อของมันแทนที่จะเป็นโค้ดเต็มไหมครับ?
เคยเรียกครูว่า “ป้าแก่” “เจ๊โหด” “อีถึก” เพื่อป้องกันไม่ให้รู้ว่าหมายถึงใครไหมครับ

นี่แหละ การเข้ารหัส

อะไรคือการเข้ารหัส

ถ้าให้ผมนิยาม การเข้ารหัสคือการ “แปลงสาร” จากสารที่ทุกคนสามารถเข้าใจได้ เป็นสารที่เราสามารถเลือกผู้ฟังได้ว่าใครมีสิทธิ์ฟังบ้าง

ทุกวันนี้เวลาเราสื่อสารกัน หรือแม้แต่กระซิบนินทากับเพื่อน ทุกคนย่อมฟังได้ เราไม่สามารถอุดหูทุกคนที่เราไม่อยากให้ฟัง แต่เราสามารถหาวิธี “ตั้งโค้ดลับ” ให้คนกลุ่มหนึ่งเข้าใจได้ว่าเราหมายถึงอะไร และคนอื่นไม่เข้าใจ

ในทางคอมพิวเตอร์ก็เช่นกัน การเข้ารหัสของเราสามารถทำได้ทั้งเพื่อกำหนดผู้ฟัง และเพื่อยืนยันผู้ส่ง

การเข้ารหัสแบบคู่รหัส (private-public key)

เรามีลูกศรแปลงสาสน์วิเศษสองตัวที่คู่กัน แทนด้วยเขียวและแดงตามลำดับ

encryption.002

กติกาคือ ถ้าเอาลูกศรเขียวแปลงสาสน์ให้อ่านไม่ได้ ตอนแปลงกลับต้องเอาศรแดงเท่านั้น และถ้าเอาแดงแปลงก่อน ขาแปลงกลับก็ต้องเอาเขียวเท่านั้น

ลูกศรแดงเขียวที่ใช้ยังต้องเป็นลูกศรคู่กันด้วย จะใช้ข้ามคู่ไม่ได้

แล้วลูกศรนี้มีประโยชน์อย่างไร

encryption.004

สมชาย หลังจากได้ลูกศรมา ก็เอาอันสีเขียวแจกชาวบ้านไปทั่ว บอกว่าถ้ามีอะไรต้องคุยกับเราก็ใช้ลูกศรอันนี้ได้นะ ส่วนลูกศรสีแดงสมชายเก็บไว้อย่างดี ไม่ให้ใครเลย

วันดีคืนดี สมศรีอยากคุยอะไรกับสมชายที่เป็นความลับ สมศรีจึงเอาลูกศรเขียวที่สมศรีมี เอาไปแปลงเป็นข้อความที่อ่านไม่ออก ก่อนตะโกนบอกข้อความที่อ่านไม่ออกให้สมชาย

เพราะวิธีเดียวที่จะอ่านข้อความออกได้ คือเอาลูกศรแดงแปลง สมชายหลังจากได้ข้อความอ่านไม่ออกมา จึงเอาลูกศรแดงแปลงกลับจนอ่านออก

ดังนั้น การทำแบบนี้ทำให้ส่งสารลับถึงเจ้าของลูกศรได้

encryption.005

ในขณะเดียวกัน สมชายกำลังจะตอบกลับ คราวนี้ไม่เป็นความลับ แต่อยากให้รู้ว่ามาจากสมชายจริงๆ สมชายจึงเอาลูกศรแดงตัวเองเข้ารหัสข้อความ ก่อนตะโกนบอกสมศรี

สมศรีสงสัยว่าข้อมูลที่ตะโกนมาจะเข้ารหัสมาทำไม และสมชายตะโกนจริงเหรอ สมศรีเลยเอาข้อความที่เข้ารหัสนั้นมาผ่านลูกศรเขียว ออกมาเป็นข้อความได้

สมศรีนึกย้อนไป วิธีการเดียวที่จะทำให้ข้อความเข้ารหัสผ่านลูกศรเขียวออกมาเป็นข้อความไม่เข้ารหัสได้ คือสมชายใช้ลูกศรแดงของตัวเองเข้ารหัสข้อความ และสมชายก็เป็นคนเดียวที่มีลูกศรแดง ดังนั้นเป็นสมชายตัวจริงแน่นอน

ดังนั้น การทำแบบนี้ทำให้ยืนยันตัวตนของเจ้าของลูกศรได้

Edit สำหรับคนที่ต้องการความแม่นยำในเนื้อหามากที่สุด น้องกอล์ฟทักท้วงมาว่าตรงส่วนที่เอา Private Key เข้ารหัสแล้วเอา Public Key ถอดรหัส ไม่ควรถอดได้ เพราะที่ถอดได้จะมีแต่ Private key โดย Private key สามารถเข้ารหัสได้ และสามารถคำนวนเป็น Public Key ได้

จากการหาข้อมูลเพิ่มเติม การเอา Private Key เข้ารหัสแล้วเอา Public Key ถอดรหัสทำได้ทางคณิตศาสตร์ที่อธิบายเรื่อง asymmetric encryption แต่ในทางปฏิบัติจริงจะไม่ทำกัน

ในทางปฏิบัติแล้วการ sign เพื่อยืนยันตัวตนจะมีเรื่องของการ hash หรืออื่นๆ เข้ามาเกี่ยวข้องด้วย หนึ่งในวิธีการยืนยันตัวผู้ส่งที่ได้รับความนิยมคือ PGP ซึ่งตัว PGP สามารถทำได้ทั้ง encrypt, sign หรือทั้งคู่ รายละเอียดเพิ่มเติมอ่านได้จากหน้าเพจนี้

ขออนุญาตอิงตามนี้นะครับ ขอบคุณครับ

ในการสื่อสารจริงๆ ปกติแล้วจะไม่ใช่แค่สมศรีที่มีลูกศรเขียวของสมชาย แต่สมชายก็มีลูกศรเขียวของสมศรี ดังนั้นทั้งคู่จะสามารถทำได้ทั้งส่งข้อมูลแบบลับๆ และยืนยันตัวเอง

ทางทฤษฎี เราเรียกลูกศรเขียวว่า “Public Key” ที่แจกให้คนอื่น และลูกศรแดงว่า “Private Key” ที่เราเก็บไว้เอง

encryption.003

การเข้ารหัสนี้เป็นมาตรฐานหลักๆ ในการส่งข้อมูล หลายครั้งเราก็กำลังเข้ารหัสโดยไม่รู้ตัว เช่น เมื่อเจอแม่กุญแจสีเขียว แปลว่าขณะนี้ข้อมูลที่เราคุยกับเว็บนี้กำลังถูกเข้ารหัส

อันที่จริงสำหรับแม่กุญแจสีเขียวนี้ การเข้ารหัสจะต่างจากวิธี Public-Private key เล็กน้อย ตรงที่มีลูกศรลูกเดียว ทำหน้าที่ทั้งเข้ารหัสและถอดรหัส ซึ่งจะได้เขียนถึงในตอนต่อๆ ไป

ทำไปเพื่ออะไร

อินเทอร์เน็ตไม่ใช่ที่ “กระซิบ” แต่ความจริงเหมือนหมู่บ้านที่ทุกคนแห่กันตะโกน

ถ้าไม่ใช้ลูกศรเขียวแดง ความลับบางอย่างอาจถูกคนอื่นรู้ และคนอื่นอาจแกล้งปลอมเป็น “สมศรี” ให้ “ตายใจ” การสื่อสารข้อมูลที่ต้องการทั้งความลับและการยืนยันตัวตนจะเป็นไปไม่ได้เลย

ถ้าอยากทดลองส่งข้อความลับมาหาเรา วิธีการที่ง่ายที่สุดคือใช้ Keybase ซึ่งเป็นเว็บฝากคีย์ออนไลน์ กรอกว่าต้องการส่งให้ผู้ใช้ชื่อ srakrn และพิมพ์ข้อความ

ข้อความมั่วๆ ที่ออกมา คือข้อความที่เกิดจากการ encrypt ด้วย public key ดังนั้นจะมีแค่คนที่ถือ private key ของเราเท่านั้นที่ถอดได้ (ซึ่งในทางทฤษฎี ก็ควรเป็นเราถือคนเดียว)

และในขณะเดียวกัน เราก็สามารถยืนยันได้ว่าข้อความ

นี่แทนเองนะ

มาจากเรา ด้วย PGP signed message ดังนี้

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

นี่แทนเองนะ
-----BEGIN PGP SIGNATURE-----
Version: Keybase OpenPGP v2.0.74
Comment: https://keybase.io/crypto

wsFcBAABCgAGBQJZzG8KAAoJELLQ7F23Q8Ij8R0P/1UfRwCJ5sJWObRUAP+HzeSg
WWMzBVc3/ZnTLmn0+NsbeLszyM5GNnRLkLWulX6334uBPNNKelVUTIInmiNBPuND
CMJCC3B7g8LgJ9EZA9Q+hFYrvIlXVx3as9mkP9b8dhsXhxB9QSP4T/3URmV1uVV9
QV7nnP3V38tKMCKzOn/RwbbOpIVcjmoHGvV0EQEztH3m3mm2wpgqMte6crrfyKfx
1LoJbodw+7lvQl+u3cDztQasIu3t4gNkm8ibtUN6ExE0U/GjNnJn/XVNkcQokkiu
QUvUtUlH2+JaFdfzX7TbTH/fPa8aNC/lV9P30d9fQqpAmHH7nvZg+b3tOGEdjv0n
bgO598b/xFrcgNADZu/vSkejuKcwwAZK56mzzcSC1WJqOQI8EYsQyIW9+DLTlCLW
rLKIfvMvJFq9GmjFouNSfPkc+ya/5lavg+Zle7pTYAHqeB1flPBjhrcKIMg3jbwx
wVmlvLN0LYvj13PIemgIZ0lfyYEIks5iIoGjqlQDC1qSO4E1BMdrwgJDsQTa6Zcc
Es0vqJcCsrD1++jTL02I+Oldlv1IMZO3u7QiG9EGgPeVD/tWMm555TWQFb1G6E5z
MY6CVuYRND7XKkXJLmm46rBOEir4N9czaRTxN73Z42RvidE7VAijRtKeFksznyBU
CU5pO89deC7fAJSneMFB
=kNwm
-----END PGP SIGNATURE-----

ซึ่ง ถ้าลองก็อปมาแปะในหน้า Verify ก็จะยืนยันว่ามาจากเราได้นั่นเอง :D


นี่คือหนึ่งในเบื้องต้นของการเข้ารหัสแบบ Public-Private key ซึ่งในทางปฏิบัติมีรายละเอียดอีกมาก

ว่าแต่ ถ้าสมมติสมศรีไม่ได้กำลังคุยกับสมชาย ลูกศรเขียวไม่ใช่ของสมชาย แต่เป็นคนอื่นหลอกมาล่ะ? :P

Leave a Reply

Your email address will not be published. Required fields are marked *