Cryptography part 1 — AES & RSA

Phai Panda
5 min readJun 22, 2020

--

บทความนี้ขอให้เชื่อก่อนว่าการใช้งานอินเตอร์เน็ตนั้นไม่ปลอดภัย เมื่อเชื่อว่ามันไม่ปลอดภัยแล้วค่อยหาวิธีรักษาความปลอดภัย หนึ่งในหลายวิธีคือการเข้ารหัสข้อมูลหรือที่เรียกว่า Cryptography ครับ

www.kissclipart.com

สืบเนื่องจากแบงก์ได้สร้างช่องทางสื่อสารส่วนบุคคลขึ้นมาแล้วมันทำงานผ่านอินเตอร์เน็ต การรักษาความปลอดภัยของข้อมูลของลูกค้าจึงเป็นสิ่งสำคัญ เนื้อหาของบทความนี้จะพูดถึงมาตราฐานการรักษาความปลอดภัยที่เกี่ยวข้องตลอดจนการเขียนโค้ดตัวอย่างเพื่ออธิบายและทำความเข้าใจ Cryptography

ต้องบอกก่อนว่าเรื่องที่อยากรักษาความปลอดภัยผ่านการใช้งานอินเตอร์มีอยู่หลายด้าน ไม่ว่าจะเป็น

  • E-commerce เน้นไปที่การจ่ายเงิน
  • การสื่อสารส่วนบุคคลที่ต้องการให้เป็นความลับ
  • การป้องกันรหัสผ่าน

ที่จะหยิบมากล่าวถึงก็คือ “การสื่อสารส่วนบุคคลที่ต้องการให้เป็นความลับ”

มี 2 ศัพท์ที่อยากให้ทราบคือ

  1. Cryptography การเข้ารหัสข้อมูล
  2. Steganography การซ่อนพรางข้อมูล

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

ส่วน Steganography เป็นการซ่อนพรางข้อมูลไปกับข้อมูลอื่นๆ เช่น รูปภาพ เสียงหรือวีดีโอ (ในภาพยนตร์ที่ผมเคยเห็นเขาใช้หนังสือพิมพ์ ใช้คนโน้นคนนี้เป็นหมาก หลากหลายวิธี) เป็นต้น

พูดได้ว่าเราสามารถใช้ทั้ง Cryptography และ Steganography เพื่อป้องกันข้อมูลให้ปลอดภัยได้ครับ

ขอเกริ่นถึงโปรโตคอลพื้นฐานกันหน่อย

TCP/IP

การสื่อสารผ่านอินเตอร์เน็ตนั้นใช้โปรโตคอล TCP/IP, TCP ย่อมาจาก Transmission Control Protocol หัวใจคือส่งข้อมูลจาก source ไปยัง destination โดยแยกข้อมูลที่ต้องการส่งออกเป็นชิ้นๆ (ภาษาอังกฤษเรียก chunks) หรือเรียกว่า IP packets

งานของ TCP/IP คือต้องขนส่ง IP package ทั้งหมดไปยังที่หมายอย่างถูกต้องและครบถ้วน

https://www.oreilly.com/library/view/http-the-definitive/1565925092/ch04s01.html

HTTP and HTTPS

HTTP ย่อมาจาก Hypertext Transport Protocol เมื่อเรียก API มักเรียกผ่าน HTTP หรือ HTTPS, HTTPS ตัว S คือ Secure คือเพิ่มการเข้ารหัส (encrypted) แต่ละ IP package ที่ชั้น TLS or SSL ดังภาพข้างต้น

ในขณะที่เราขนส่งข้อมูลผ่าน TCP/IP นั้นชั้นของ HTTP จะอธิบายลักษณะของข้อมูลเพื่อให้ application สามารถอ่านและประมวลผลข้อมูลได้นั่นเอง

เราจะเห็นว่าข้อมูลที่ส่งผ่าน HTTPS มีความปลอดภัยเพราะประดา IP package ทั้งหลายถูกเข้ารหัส

ช่องทางที่ปลอดภัยมีศัพท์เรียกว่า Secured Channel

ทว่าก่อนจะไปไกลกว่านี้เรากลับมาที่การเข้ารหัสข้อมูลกันครับ

ความรู้เบื้องต้นเกี่ยวกับการเข้ารหัสข้อมูล

การเข้ารหัสข้อมูลมีจุดมุ่งหมายต่อไปนี้

  • Confidentiality คือการรักษาความลับ เป็นการปกปิดข้อมูลที่รับส่งผ่านสื่อต่างๆ
  • Integrity คือการรักษาความถูกต้อง ให้มั่นใจว่าข้อมูลที่รับส่งนั้นจะไม่ถูกเปลี่ยนแปลงจากผู้ส่งไปจนถึงผู้รับ
  • Authentication คือการพิสูจน์ทราบตัวตน พิสูจน์ว่าคนนั้นหรือระบบนั้นมีตัวตนจริง
  • Non-Repudiation คือการไม่ปฏิเสธการกระทำ กล่าวคือทำให้ผู้ส่งข้อมูลนั้นไม่สามารถปฏิเสธการกระทำของตัวเองได้

Plaintext

ข้อมูลดั่งเดิมที่ยังไม่ผ่านการเข้ารหัสจะเรียกว่า Plaintext

Cipher

อ่านว่า ไซเฟอร์ คือ Plaintext ที่ผ่านการเข้ารหัส หรือจะเรียกว่า Ciphertext ก็ได้

ตัวละคร

เรื่องที่น่าสนใจของการรักษาความปลอดภัยมักจะใช้ตัวละครในการอธิบายการสื่อสาร ดังนี้

  • สื่อสารกันระหว่างคนสองคน คนหนึ่งจะชื่อ อลิส (Alice) ส่วนอีกคนจะชื่อ บ็อบ (Bob)
  • เมื่อมีคนที่สามและสี่เข้ามา พวกเขาจะชื่อ แคโรล (Carol) และ เดฟ (Dave)
  • คนที่มีพฤติกรรมไม่ดีจะชื่อ มัลโลรี (Mallory)
  • คนที่แอบดูข้อมูลจะชื่อ อิฟ (Eve)
  • ส่วนคนชื่อ เทรนต์ (Trent) ให้เป็นคนที่ไว้วางใจได้

แสดงว่ารูปแบบของภัยคุกคามอันนำมาซึ่งความไม่ปลอดภัยบนอินเตอร์เน็ตมีลักษณะที่สามารถจัดกลุ่มได้ ดังนี้

  • การแอบดักอ่านข้อมูล เรียกว่า Eavesdropping อาจไม่ถึงขนาดแก้ไขข้อมูลแต่ข้อมูลนั้นก็ถูกเปิดเผยโดยผู้ที่ไม่ได้รับอนุญาตเสียแล้ว
  • การแอบแก้ไขข้อมูล เรียกว่า Tampering หรือ Man-in-the-middle attack คือข้อมูลถูกแก้ไขโดยบุคคลที่สาม
  • การปลอมตัวหรือการหลอกลวง เรียกว่า Impersonation แบ่งย่อยได้เป็น Spoofing กับ Misrepresentation, Spoofing คือการปลอมตัวหลอกว่าเป็นบุคคลนั้น เช่น การปลอมอีเมลซึ่งมีความคล้ายคลึงกับของจริงมาก ส่วน Misrepresentation คือการหลอกว่าเป็นตัวแทนที่แท้จริง เช่นตัวแทนองค์กรหรือหน่วยงานเพื่อขอรับบริจาคด้วยการสร้างเว็บไซต์ปลอม

ประเภทของการเข้ารหัสข้อมูล

  1. Secret Key หรือ Symmetric Key Cryptography
  2. Public Key หรือ Asymmetric Key Cryptography

การเข้ารหัสข้อมูลมีกระบวนการที่เกี่ยวข้อง 2 ขั้นตอน คือการเข้ารหัส (encryption) และการถอดรหัส (decryption) แต่มีบางฟังก์ชันที่เข้ารหัสแบบทางเดียว (เข้ารหัสไปแล้วจะไม่นำมาถอดรหัสอีก) เรียกว่า Hash function ผลที่ได้จะเป็น ciphertext ที่มีความยาวคงที่และจะไม่ถอดรหัสกลับมาเป็น plaintext อีก มีประโยชน์ในการใช้ตรวจสอบความถูกต้องของข้อมูล (Integrity) ว่าข้อมูลนั้นจะไม่ถูกแก้ไขหรือเปลี่ยนแปลงระหว่างทาง

Secret Key or Symmetric Key Cryptography

Secret Key หรือเรียกว่าการเข้ารหัสแบบสมมาตร (Symmetric Key) หัวใจคือใช้คีย์ (Key) เดียวกันสำหรับการเข้าและถอดรหัส โดยที่ความยาวของคีย์นั้นคงที่เสมอ

สมมติผู้ส่งใช้คีย์ชื่อ Key1 เข้ารหัส plaintext ได้ ciphertext แล้วก็จะส่ง key1 และ ciphertext นี้ไปให้ผู้รับ

ผู้รับก็จะใช้ Key1 อันเดียวกันนี้ถอดรหัสจาก ciphertext เป็น plaintext

ความปลอดภัยจะเกิดก็ต่อเมื่อ Key1 ถูกส่งผ่าน secured channel เท่านั้น

https://www.researchgate.net/figure/Secret-Key-Cryptography_fig1_277076733

secured channel นี้จะเป็นช่องทางใดๆก็ได้ที่ฝ่ายส่งและรับเห็นตรงกันว่าปลอดภัย อาจบอกกันปากต่อปาก (ถ้าปลอดภัย) โทรบอกกันทางโทรศัพท์ (ถ้าปลอดภัย) ส่งอีเมล (ถ้าปลอดภัย) บันทึกลงแฟลชไดร์ฟแล้วนำไปส่งให้ (ในกรณีที่อยู่ใกล้กัน) แต่ถ้ายังรู้สึกไม่ปลอดภัยหรือต้องการส่งระยะไกล วิธีการที่ดีที่สุดในตอนนี้คือใช้ Public Key เป็นตัวช่วยส่งซึ่งจะกล่าวถึงในภายหลัง

มาตราฐานการเข้ารหัสของ Symmetric Key

มีอยู่หลายมาตราฐาน (ความคิดและวิธีการ) ขึ้นอยู่กับอัลกอริทึมที่ใช้กับความยาวของคีย์ที่ใช้ (ยิ่งยาวยิ่งปลอดภัย)

มีอยู่หลายมาตรฐาน ได้แก่

  • DES
  • 3DES
  • AES
  • Twofish
  • Serpent
  • CAST5
  • RC4
  • IDEA

และอื่นๆ ในที่นี้จะขอหยิบยกเฉพาะที่สนใจนะครับ ดังนี้

DES

ย่อมาจาก Data Encryption Standard ใช้กับข้อมูลในชั้นความลับน้อยที่สุด มีความยาวของคีย์แค่ 56 บิต ซึ่งสามารถถูกถอดรหัสโดยไม่ต้องทราบคีย์ได้ในเวลาไม่กี่นาทีจากเครื่องคอมพิวเตอร์ในปัจจุบัน เหตุนี้ DES จึงไม่ปลอดภัย

3DES

สืบเนื่องจาก DES มีความยาวของคีย์ที่สั้นไป จึงได้เพิ่มความยาวของคีย์ให้มากขึ้น เรียกว่า 3DES ย่อมาจาก Triple-DES ขั้นตอนของการเข้ารหัสเหมือน DES แต่ทำทั้งหมด 3 ครั้ง ความยาวของคีย์ที่ปรับปรุงมี 2 ขนาด คือ 128 และ 168 บิต ซึ่งมากพอที่ทำให้การถอดรหัสนั้นเป็นไปได้ยากทั้งใช้เวลายาวนานขึ้นไปอีก

ทว่าปัจจุบันรัฐบาลสหรัฐฯได้ประกาศให้ใช้การเข้ารหัสแบบ AES แทน DES และ 3DES

AES

ย่อมาจาก Advanced Encryption Standard ประกาศใช้ตั้งแต่ปี ค.ศ. 2001 มันใช้อัลกอริทึมชื่อ Rijndael อ่านว่า เรนดอล (rain doll) หรือ ไรน์ดาล (rhine dahl) ออกแบบโดยนักออกแบบการเข้ารหัสชาวเบลเยียม 2 คน ชื่อ โจแอน เดเมน (Joan Daemen) กับ วินเซนต์ ริจเมน (Vincent Rijmen)

AES ถูกออกแบบให้เป็นบล็อคไซเฟอร์ที่ความยาวของบล็อคและคีย์สามารถเปลี่ยนแปลงได้
- ขนาดของคีย์ระหว่าง 128, 192 และ 256 บิต นำมาผสมกันได้
- บล็อคข้อมูลที่มีขนาด 128, 192 และ 256 บิต ก็นำมาผสมกันได้เช่นกัน

AES ถูกใช้งานอย่างแพร่หลายด้วยเหตุผลต่อไปนี้

  • เป็นมาตราฐานการเข้ารหัสแบบเปิด ไม่มีค่าลิขสิทธิ์
  • รัฐบาลสหรัฐฯได้รับรองให้ใช้สำหรับการเข้ารหัสข้อมูลในระดับสูงสุด

อย่างไรก็ตาม Secret Key or Symmetric Key นี้ก็มีความยาวคีย์ที่คงที่เสมอและมีปัญหาเรื่องช่องทางสื่อสารที่ปลอดภัย

ดังนั้นเพื่อส่งคีย์นี้เข้าหรือถอดรหัสในโลกของการสื่อสารผ่านระบบเครือข่าย (Network) จึงต้องคิดค้นและพัฒนาวิธีสำหรับแจกจ่ายคีย์ดังกล่าวให้ปลอดภัยให้ได้

แล้วก็ได้สมใจ! เริ่มจากมองว่า Secret Key or Symmetric Key นี้เป็นข้อมูลแทน จากนั้นจะสร้างคีย์ใหม่ขึ้นมา 2 คีย์โดยแยกหน้าที่กัน (private key & public key) อันหนึ่งเพื่อเข้ารหัสและอีกอันเพื่อถอดรหัส นำมาหุ้มข้อมูลข้างต้นนี้อีกชั้น เรียกวิธีการว่า Public Key Cryptography อันจะกล่าวต่อจากนี้

Public Key or Asymmetric Key Cryptography

เมื่อต้องการส่ง Symmetric Key ผ่านระบบเครือข่ายเพื่อให้เกิดความปลอดภัยมากที่สุด เราจะหุ้ม Symmetric Key นี้อีกชั้น

เป้าหมายคือจะสร้างคีย์ใหม่ขึ้นมา 2 คีย์ ด้วยวิธีการที่ว่า

  • จะสร้าง private key ขึ้นมาก่อน
  • จากนั้นนำ private key มาสร้าง public key ทั้งสองนี้จะมีความสัมพันธ์ทางคณิตศาสตร์แบบคีย์คู่ซึ่งเข้าใจเฉพาะคู่ของมันเท่านั้น

เมื่อเราใช้คีย์หนึ่งเข้ารหัสข้อมูล (จะใช้ private key หรือ public key ก็ได้) อีกคีย์หนึ่งจะใช้ถอดรหัสข้อมูลเสมอ ตัวอย่าง

  • ใช้ private key เข้ารหัส ก็ต้องใช้ public key ถอดรหัส
  • ใช้ public key เข้ารหัส ก็ต้องใช้ private key ถอดรหัส

วีธีการที่เรียกว่า Public Key นี้จะมี 2 คีย์ที่ความยาวของคีย์ไม่เท่ากัน เรียกได้อีกชื่อว่า Asymmetric Cryptography หรือที่เรียกกันว่าการเข้ารหัสแบบไม่สมมาตร (Asymmetric Key)

การแจกจ่ายคีย์คู่ (Private key & Public key) และใช้งาน

วิธีการแจกจ่ายคีย์คู่ให้ถือว่า private key เป็นความลับสูงสุด จงเก็บไว้กับตัว ส่วน public key นั้นก็ตามชื่อ สามารถนำไปแจกจ่ายให้เป้าหมายในช่องทางอินเตอร์เน็ตได้

ตัวอย่าง

เมื่ออลิสต้องการเข้ารหัสข้อมูล สมมติเป็น Symmetric Key แล้วส่งให้บ็อบ

  • อย่างแรกอลิสต้องได้รับ public key ของบ็อบมาเก็บไว้ก่อน จากนั้นใช้มันเข้ารหัส
  • ส่งข้อมูลที่เข้ารหัสนี้ (ciphertext) ไปให้บ็อบ
  • เมื่อบ็อบได้รับก็จะถอดรหัสด้วย private key ของเขาเอง

หากบ็อบต้องการส่งข้อมูลให้อลิสบ้างก็ต้องทำแบบเดียวกัน สำคัญคือต้องได้ public key ของอลิสมาเก็บไว้ก่อน ดังภาพ

https://www.wikiwand.com/en/Public-key_cryptography

มาตราฐานการเข้ารหัสข้อมูลแบบ Asymmetric Key

ได้แก่

  • RSA
  • Diffie-Hellman
  • Digital Signature
  • ElGamal
  • Elliptic Curve Cryptography (ECC)
  • Public-Key Cryptography Standard (PKCS)
  • Cramer-Shoup
  • Key Exchange Algorithm (KEA)
  • LUC

และอื่นๆ ในที่นี้จะขอหยิบยกเฉพาะที่สนใจนะครับ ดังนี้

RSA

ได้มาจากชื่อตัวอักษรตัวแรกของผู้คิดค้น 3 คน คือ รอน รีเวสท์ (Ron Rivest), อดิ ชาเมอร์ (Adi Shamir) และลีโอนาร์ด แอ็ดเดิลแมน (Leonard Adlemen) ณ​ มหาวิทยาลัย MIT

สิ่งที่น่าสนใจคือ RSA เมื่อประยุกต์ใช้กับ Digital Signature จะทำให้เกิดความปลอดภัยอย่างที่สุด ฉะนั้นเมื่อพูดถึง RSA ก็ต้องพูดถึง Digital Signature ด้วย

ความคิดของ RSA ก็คือคีย์คู่ private key & public key ดังที่ได้กล่าวมาแล้ว

ความปลอดภัยของ RSA คือใช้คีย์ที่มีความยาวมากๆเข้าไว้ (ยิ่งยาวยิ่งปลอดภัย) แต่ก็ต้องแลกกับเวลาที่ใช้ในการถอดรหัสนานขึ้น เพื่อความปลอดภัยปัจจุบันอาจเลือกคีย์ที่มีความยาว 1024 บิตหรือสูงกว่านั้น

Diffie-Hellman

ความคิดเบื้องต้นเหมือน RSA ครับ แตกต่างที่จะไม่ใช้อัลกอริทึมของคีย์มาเข้าและถอดรหัสข้อมูล แต่จะใช้ public key ของผู้รับกับ private key ของตนมาสร้างเป็น Symmetric Key หรือที่เรียกว่า Secret Key แทน จากนั้นใช้มันเข้ารหัสข้อมูลแล้วจึงส่งข้อมูลที่เข้ารหัสนั้นผ่านอินเตอร์เน็ต

ตัวอย่าง

เมื่ออลิสต้องการเข้ารหัสข้อมูล แล้วส่งมันให้กับบ็อบ

  • อลิสต้องได้รับ public key ของบ็อบมาเก็บไว้
  • และบ็อบต้องได้รับ public key ของอลิสมาเก็บไว้
  • อลิสสามารถสร้าง Symmetric Key ขึ้นมาจาก public key ของบ็อบกับ private key ของเธอเอง
  • อลิสใช้ Symmetric Key นี้เข้ารหัส
  • อลิสส่ง ciphertext ที่ได้ให้แก่บ็อบ
  • บ็อบสามารถสร้าง Symmetric Key เดียวกันจาก public key ของอลิสกับ private key ของเขาเอง
  • เมื่อบ็อบได้รับ ciphertext ก็ถอดรหัสได้

จะสังเกตว่าทั้งสองไม่จำเป็นต้องส่ง Symmetric Key นี้ผ่านอินเตอร์เน็ต!

https://www.wikiwand.com/en/Public-key_cryptography

Digital Signature

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

Digital Signature หรือลายเซ็นดิจิตอล (หรือลายเซ็นอิเล็กทรอนิกส์) เป็นเรื่องที่ว่าด้วยการให้ความน่าเชื่อถือ ชี้วัดด้วยการตรวจสอบความถูกต้อง

ตรวจสอบความถูกต้องแบบไหน? คำตอบ แบบเซ็นลงบนกระดาษเลย

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

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

Digital Signature ใช้วิธีการเข้ารหัสแบบ Asymmetric Key โดยผู้เซ็นจะใช้ private key ของเขาเป็นตัวแทนของตนเอง ส่วนผู้รับจะใช้ public key ของผู้เซ็นในการตรวจสอบการมีตัวตนและความถูกต้องของข้อมูลนั้น

ความแตกต่างของ Digital Signature กับวิธีการ Public Key ที่ได้กล่าวไปแล้ว (RSA, Diffie-Hellman) คือเนื้อหาของข้อมูลอาจเปิดเผยได้ เพราะตัวมันถูกคิดขึ้นมาด้วยจุดประสงค์เพียงเพื่อรับรองว่าผู้เซ็นเห็นด้วยกับเนื้อหาที่ส่ง และข้อมูลที่ส่งถึงผู้รับไม่มีการแก้ไขหรือถูกเปลี่ยนแปลงโดยบุคคลที่สามแค่นั้น

เพื่อนๆอาจตั้งคำถามเช่นเดียวกับผมว่า การไม่ถูกแก้ไขข้อมูลโดยบุคคลที่สามจะรู้ได้อย่างไร?

ประกอบด้วย 3 ขั้นตอน ดังนี้

  1. การสร้างคีย์ (Key Generation) คือสร้าง private key และ public key
  2. การเซ็นชื่อ (Signing) คือการสร้างลายเซ็นดิจิตอลด้วย Hash function กับ private key ของผู้ลงชื่อ
  3. การพิสูจน์ลายเซ็น (Verification) คือขั้นตอนของผู้รับ ตรวจสอบว่าลายเซ็นดิจิตอลนั้นถูกต้องและข้อมูลไม่ถูกเปลี่ยนแปลงระหว่างทาง

ตัวอย่าง

เมื่ออลิสต้องการส่งข้อมูลที่เปิดเผยได้ให้แก่บ็อบ

  • อลิสนำข้อมูลนั้นมาเข้า Hash function จะได้ ciphertext ที่มีความยาวคงที่ เรียกว่า Message Digest
  • อลิสเข้ารหัส Message Digest ด้วย private key เท่ากับว่าเธอได้สร้างลายเซ็นดิจิตอลแล้ว
  • ข้อมูลก่อนจะกลายเป็น Message Digest จะถูกส่งผ่านอินเตอร์เน็ตไปพร้อมกับลายเซ็นดิจิตอล
  • เมื่อบ็อบได้รับก็จะตรวจสอบลายเซ็นดิจิตอลเสียก่อน โดย นำข้อมูลก่อนจะกลายเป็น Message Digest ที่ส่งมาพร้อมกันนั้นเข้า Hash function จะได้ ciphertext ที่มีความยาวคงที่ เรียกว่า Message Digest ต่อไปนี้จะขอเรียกว่า MD1 จากนั้นจะใช้ public key ของอลิสถอดรหัสลายเซ็นดิจิตอล ได้เป็น Message Digest อีกอันซึ่งจะขอเรียกว่า MD2 สุดท้ายนำ MD1 เทียบกับ MD2 ถ้าทั้งสองเหมือนกันจึงสรุปได้ว่าข้อมูลไม่ถูกเปลี่ยนแปลงระหว่างทางนับตั้งถูกส่งมาจากอลิส
https://www.wikiwand.com/en/Public-key_cryptography

จากรูปเพื่อนๆจะสังเกตว่า Hello Bob! ก็คือข้อความหรือข้อมูลที่เปิดเผยได้ของอลิสที่ต้องการส่งให้บ็อบ เธอส่งมาพร้อมกับลายเซ็นดิจิตอลของเธอ และบ็อบจะไม่เชื่อว่าข้อมูลนั้นส่งมาจากเพื่อนสาวจริงจนกว่าจะพิสูจน์ทราบตัวตนของอลิสและจะต้องแน่ใจว่าข้อมูลไม่ถูกแก้ไขระหว่างทาง

เหตุนี้การสร้าง Message Digest จากข้อมูลที่ส่งมาด้วย Hash function นำมาเทียบกับ Message Digest ที่แนบมาหลังจากถูกถอดรหัสแล้วมันทั้งคู่เหมือนกันจึงตอบคำถามที่ว่า การไม่ถูกแก้ไขข้อมูลโดยบุคคลที่สามจะรู้ได้อย่างไร นั่นเองครับ

part ถัดไปเรามาสร้าง Symmetric Key และ Asymmetric Key กันนะ

อ้างอิง

หนังสือ Master in Security 3rd Edition

https://www.us-cert.gov/ncas/tips/ST04-018

--

--