ก่อนอื่นต้องขออธิบายคำศัพท์ที่เกี่ยวข้อง
plain text/data = ข้อมูล
encode/encrypt = การเข้ารหัส
cipher = plain text หรือ data ที่ผ่านการเข้ารหัสมาแล้ว
decode/decrypt = การถอดรหัส
hash = การเข้ารหัส
hash value/digest= plain text หรือ data ที่ผ่านการ hash มาแล้ว
encode กับ hash ต่างกันตรงไหน? ในเมื่อมันคือการเข้ารหัสเหมือนกัน
encode ได้ ก็ต้อง decode ได้ เช่น base64 เป็นต้น
เราใส่ข้อความ “Hello” แล้วเอาไปเข้ารหัสได้ค่าๆ นึงออกมา แล้วเราเอาค่านี้ไปถอดรหัส ก็จะได้ข้อความ “Hello” กลับคืนมา
แต่ hash มันอยู่แบบโดดเดี่ยวเดียวดาย ไม่มีคู่มาถอดรหัสให้
ดังนั้นมันต่างกันตรงที่เมื่อเอา plain text หรือ data ไปทำการ hash แล้ว จะไม่สามารถทำการย้อนกลับ เพื่อให้ได้ plain text หรือ data เดิมออกมาได้
ตัวที่เราคุ้นเคยกันมากที่สุดในปัจจุบันก็พวก md5 sha1 sha2
Hash function = One-way function คือ “Encryption” เพราะไม่สามารถทำย้อนกลับได้ยกเว้นแต่มี key ต่างจาก “Encoding” คือการเข้ารหัสที่สามารถทำย้อนกลับได้ด้วย algorithm อันเดิม
คุณสมบัติหลักๆเลยคือ
1. หาก Input เหมือนเดิม Output ที่ได้จะไม่เปลี่ยนไปจากเดิม
2. หาก Input เปลี่ยนไปแม้แต่นิดเดียว เช่น จาก Pantip เป็น Pantip1, Output ที่ได้จะต่างกันอย่างสิ้นเชิง คือไม่มีความคล้ายคลึงกันแม้แต่นิดเดียว
3. ไม่ว่า Input จะยาวแค่ไหน Output ที่ได้จะมีความยาวเท่าเดิมตลอด เช่น SHA-256 -> 256 bits หรือ 64 digits
4. ไม่สามารถใช้ Algorithm เดิมกับ Ouput เพื่อหา Input ดั้งเดิมได้ กล่าวคือถ้า Hash Input A แล้วก็จะได้ output A แล้วถ้าเกิด Hash output A ก็จะได้ output B (ที่ไม่ใช่ Input A)
5. เร็ว…. เร็วมาก ไม่ต้องใช้ Key ด้วย
6. ซับซ้อนพอตัว
ประโยชน์…
1. Crypto Currencies
2. Digital Signature
3. เอาใว้เก็บ password ใน database
4. เอาไว้เช็คไฟล์ที่ download มาว่าถูกต้องรึเปล่า
สำหรับ Digital Signature ก็ง่ายมากครับ หลักๆคือมี 3 ส่วน
1. Public key
2. Private key
3. Message
การสร้าง Digital Signature ก็ง่ายๆคือเอา Message ไปเข้ารหัสด้วย Private Key จะได้ Digital Signature จากนั้นก็ส่งข้อมูล ไปพร้อมกัน คือ Message+Digital Signature+Public Key โดยตัว Public Key มีหน้าที่ verify ว่า Digital Signature ที่แนบมานั้น Valid จริงๆ
ตัวอย่างคือ Alice ส่งข้อมูล M ไปหา Bob โดย Alice สร้าง Digital Signature (SM) แนบไปพร้อมกับ M และ Public Key(PK) หรือก็คือ M+SM+PK เกิดวันดีคืนดีมีมือดี EVE แอบดักข้อมูลแอบเปลี่ยน Message(์จาก M เป็น M1) Bob จะได้รับ M1+SM+PK ซึ่งพอใช้ PK verify SM แล้วจะรู้ได้ทันทีว่า M1 นั้นไม่ใช่ original message จาก Alice สาเหตุคือ EVE ไม่ทราบ Private Key ของ Alice ทำให้ไม่สามารถเปลี่ยนแปลง Digital Signature ได้ งงรึเปล่า?
ส่วน Crypto currencies ใช้หลักการเดียวกันครับ
ที่ถูก
ขั้นตอนสร้าง Digital Signature
1. Message ไป Hash ก่อนสมมติว่า output เป็น HM
2. เอา HM ไป encrypt ด้วย Private Key ซึ่ง algorithm ที่ใช้ส่วนใหญ่ก็ Elliptic Curve แล้วก็จะได้ Output มาเป็น Digital Signature
3. ตอนส่งข้อมูลก็คือ Message + Digital Signature + Public Key ก็คือส่งไปพร้อมๆกัน
ขั้นตอน Verification
1. ผู้รับได้รับ Message + Digital Signature + Public Key มา
2. ทำการ decrypt Digital Signature ด้วย Public key จะได้ Output มาเป็น HM
3. ทำการ Hash Message แล้วเอา Output ที่ได้มาเทียบกับ HM ถ้าตรงก็ถือว่าผ่าน ถ้าไม่ตรงกันก็แสดงว่าข้อมูลที่ได้รับมาไม่ใช่ original
ถ้ายังไม่เข้าใจผมแนะนำให้เริ่มจากพื้นฐาน Cryptography ก่อนเลย ศึกษาก่อนว่าอะไรคือ Private/Public key