รู้จักกับ Message Authentication (Hash)

Thana Hongsuwan
5 min readJul 21, 2018

--

จากบทความเรื่อง “การเข้ารหัสลับแบบสมมาตร” ที่ได้เขียนไปก่อนหน้านี้ คงจะเข้าใจดีว่า การเข้ารหัสลับนั้น ช่วยป้องกันไม่ให้ข้อมูลถูกดักจับไปได้ (ถือเป็นการโจมตีแบบ Passive) แต่มีการโจมตีอีกแบบหนึ่ง ซึ่งเป็นการโจมตีในลักษณะ Active ได้แก่ การเปลี่ยนแปลงข้อมูล หรือ หนักไปถึงขนาดแอบอ้าง เช่น การแอบแก้ไขข้อมูลที่ส่งมาระหว่างทาง เช่น แก้ไขไฟล์เอกสาร

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

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

Message Authentication คืออะไร

กระบวนการในการรับรองเอกสาร (Message Authentication) ก็คือ กระบวนการที่ยอมให้คู่ที่มีการรับส่งเอกสารกัน สามารถจะพิสูจน์ได้ว่า เอกสารหรือข่าวสารที่ได้รับนั้น เป็นเอกสารที่รับรองความถูกต้อง โดยมีเป้าหมายอยู่ 2 ประการ คือ รับรองว่าเนื้อความในเอกสารฉบับนั้น ยังคงเป็นเนื้อความเดิม ที่ส่งมาแบบนั้นโดยไม่ได้มีการเปลี่ยนแปลงระหว่างการส่ง และรับรองว่าเอกสารฉบับนั้นส่งมาจากต้นทางที่อ้างถึงจริง ๆ เช่น หากเป็นการส่ง Mail ก็คือการรับรองว่า Mail ฉบับดังกล่าวส่งมาจากผู้ส่งตามชื่อจริง และเนื้อความก็คือเนื้อความที่ผู้ส่งเขียนขึ้นทั้งหมด นอกจากนั้นยังอาจรับรองด้วยว่า เอกสารนั้น เป็นเอกสารที่ส่งมาตามกำหนด ไม่มีการล่าช้าจนเกินการใช้งาน และไม่ได้เป็นเอกสารที่เกิดจากการส่งซ้ำ (Replay Attack)

Message Authentication โดยใช้การเข้ารหัสลับ

การรับรองเอกสารที่ง่ายที่สุดวิธีหนึ่ง ก็คือ การเข้ารหัสลับเอกสารด้วย การเข้ารหัสแบบคีย์เดี่ยว โดยสมมติว่ามีเฉพาะผู้ส่งและผู้รับที่รู้และใช้ Key เดียวกัน ดังนั้นเมื่อผู้ส่งทำการส่งเอกสาร ก็จะมีเฉพาะผู้รับเท่านั้นที่สามารถถอดรหัสเพื่ออ่านเอกสารได้ ดังนั้นจึงถือเป็นการรับรองเอกสารได้วิธีหนึ่ง และหากในการส่งเอกสาร มีการตรวจสอบความผิดพลาด และมีการกำหนดหมายเลขลำดับ (Sequence Number) ก็ยิ่งทำให้แน่ใจได้ว่าเอกสารไม่มีความผิดพลาด และมีลำดับการส่งที่ถูกต้อง ไม่สามารถทำ Replay Attack ได้ และหากมีการทำ Timestamp ด้วยแล้ว ก็จะตรวจสอบเวลาที่ใช้ในการส่งได้อีกด้วย

Message Authentication แบบไม่ใช้การเข้ารหัสลับ

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

ในการสร้างการรับรองเอกสารที่สามารถตรวจสอบได้นั้น อาจใช้ฟังก์ชันทางคณิตศาสตร์ และ รหัสลับ (Secret Key) เพื่อสร้างบล็อกของข้อมูลขนาดเล็ก ที่เรียกว่า Message Authentication Code หรือ MAC จากนั้นก็จะแนบ MAC ไปกับเอกสาร และส่งไปยังผู้รับ โดยเมื่อผู้รับได้รับเอกสารและ MAC ก็จะนำเอกสารที่ได้รับนี้ ไปผ่านฟังก์ชันทางคณิตศาสตร์เดียวกัน โดยใช้รหัสลับเดียวกัน เช่น หากส่งจาก A ไปยัง B ก็จะเรียกว่า รหัสลับ AB เพราะรหัสลับที่ต่างกันก็จะสร้าง MAC ที่ต่างกัน ดังนั้นในรหัสลับแต่ละรหัสลับ ก็จะใช้ในการส่งเอกสารเฉพาะคู่ใดคู่หนึ่งเท่านั้น

โดยหากเอกสารที่ได้รับมีเนื้อความเหมือนกับที่ส่งมา เมื่อผ่านฟังก์ชันทางคณิตศาสตร์แล้ว ก็ควรจะได้ MAC ที่มีค่าเท่ากันด้วย ดังนั้นก็จะนำค่า MAC ที่ได้จากการคำนวณ ไปเปรียบเทียบกับ MAC ที่แนบมากับเอกสาร ว่าเป็นค่าเดียวกันหรือไม่ โดยหากมีค่าเดียวกัน ก็สามารถอนุมานได้ว่าเนื้อความเป็นเนื้อความเดียวกัน ดังรูป

รูปที่ 1

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

การใช้ One-Way Hash Function

ในการสร้าง MAC โดยใช้ MAC Algorithm นั้น เนื่องจากลักษณะของการใช้งาน จะเป็นการเข้ารหัส หรือการสร้าง MAC ในทิศทางเดียว โดยไม่มีความจำเป็นต้องถอดรหัสกลับมาได้ และเนื่องจากค่า MAC ที่ต้องการควรจะมีขนาดความยาวคงที่ และเกิดจากการประมวลผลเนื้อความทั้งหมด ซึ่งการทำงานในลักษณะนี้ จะเหมาะกับการทำงานที่เรียกว่า Hash โดยฟังก์ชัน Hash จะรับข้อความ M ที่มีความยาวใด ๆ และสร้างรหัสที่มีความยาวคงที่ H(M) ออกมา โดยจะเรียกรหัสนี้ว่า Message Digest หรือ MD ออกมา โดย Hash จะต่างจาก MAC ตรงที่ Hash ไม่จำเป็นต้องใช้ Secret Key โดยการทำงานของ Hash สามารถแสดงในรูปที่ 2

รูปที่ 2

ในรูป (a) จะแสดงการใช้งานฟังก์ชัน Hash ร่วมกับ Secret Key โดยหลังจากที่สร้าง MD ออกมาแล้ว ก็จะนำเอา MD นี้มาเข้ารหัสโดยใช้ Secret Key จากนั้นจึงแนบ MD ที่เข้ารหัสแล้วไปกับเอกสาร แล้วจึงส่งเมื่อเอกสารไปถึงปลายทาง ก็จะมีการแยกเอกสารออกมาแล้วสร้าง MD โดยใช้อัลกอริทึมเดียวกันขึ้นมาใหม่ แล้วเปรียบเทียบกับ MD ที่ส่งมาพร้อมเอกสารว่าเท่ากันหรือไม่ ซึ่งวิธีนี้จะคล้ายกับวิธีการในรูปที่ 1 โดยสมมติว่า Secret Key จะทราบเฉพาะผู้ส่งและผู้รับเท่านั้น

อย่างไรก็ตาม ในโลกแห่งความเป็นจริงนั้น เป็นเรื่องยากที่จะใช้ Key จำนวน 1 คีย์ สำหรับการสื่อสาร 1 คู่ เพราะในการสื่อสารในวงกว้างก็จะต้องสร้างคีย์ขึ้นมามากมาย อันทำให้ยากต่อการจดจำและการจัดเก็บ นอกจากนั้นยังมีปัญหาในการส่ง Key ให้กันอีกด้วย ดังนั้นในทางปฏิบัติแล้ว ในการรับรองเอกสารนี้ มักจะนำคีย์ที่เรียกว่า Public Key มาใช้งานมากกว่า โดยระบบของ Public Key จะมีการสร้าง Key ขึ้นมา 2 Key โดยคีย์แรกจะเก็บไว้กับผู้สร้าง เรียกว่า Private Key และคีย์ที่ 2 จะแจกจ่ายออกไป เรียกว่า Public Key โดยข้อความที่เข้ารหัสโดยคีย์ใดคีย์หนึ่ง จะต้องถอดโดยคีย์คู่ของมัน เช่น หากเข้ารหัสด้วย Private Key ก็ต้องถอดด้วย Public Key

ในรูป (a) และ ( b) นั้นจะมีการใช้การเข้ารหัส เพื่อเข้ารหัสข้อมูลในส่วนของ MD ทั้งนี้ เพื่อไม่ให้ผู้ดักจับข้อมูลกลางทาง สามารถจะปลอมโดยการสร้าง MD ขึ้นมาใหม่ได้ อย่างไรก็ตามการเข้ารหัสจะทำให้เสียเวลาในการทำงานเพิ่มขึ้น หรือหากให้ทำงานด้วยฮาร์ดแวร์ ก็จะเป็นการเพิ่มค่าใช้จ่าย นอกจากนั้นในอัลกอริทึมการเข้ารหัสบางตัว ก็มีสิทธิบัตรอยู่ เช่น RSA ซึ่งต้องเสียค่าใช้จ่ายเพิ่ม หรือบางอัลกอริทึมก็จะติดขัดในเรื่องของกฎหมายของการส่งออกรหัสลับ เช่น DES ดังนั้นหากไม่ใช้อัลกอริทึมในการเข้ารหัสเลยก็สามารถทำได้ ดังในรูป (c ) โดยการเพิ่มสิ่งที่เรียกว่าข้อมูลลับเข้าไปในข้อมูล ก่อนจะมีการคำนวณค่า MD ดังนั้นค่า Hash ที่ได้ ก็จะเป็นค่า Hash ของข้อมูลกับข้อมูลลับ จากนั้นในการส่งจะส่งเฉพาะข้อมูลกับ Hash โดยไม่ส่งข้อมูลลับไปด้วย โดยถือว่าข้อมูลลับจะต้องทราบทั้ง 2 ฝ่าย จากนั้นเมื่อข้อมูลส่งถึงปลายทาง ก็จะนำข้อมูลลับมาเพิ่มเข้าไปก่อนที่จะคำนวณค่า Hash ก็จะป้องกันการแก้ไขระหว่างทางได้ โดยไม่จำเป็นต้องใช้อัลกอริทึมในการเข้ารหัสใด ๆ เลย

Secure Hash Function and HMAC

การใช้ฟังก์ชัน Hash นั้นนอกจากจะใช้งานสำหรับสร้าง Message Digest แล้วยังใช้ในการสร้าง Digital Signature หรือลายมือชื่ออิเล็กทรอนิกส์อีกด้วย โดยฟังก์ชัน Hash ที่ดีควรมีคุณสมบัติดังนี้

  • ฟังก์ชัน Hash ควรสามารถใช้งานกับข้อมูลที่มีความยาวใด ๆ
  • ฟังก์ชัน Hash จะต้องสามารถสร้างผลลัพธ์ที่มีความยาวเพียงค่าเดียว
  • ฟังก์ชัน Hash ควรเป็นฟังก์ชันที่ไม่ซับซ้อน สามารถสร้างโดยฮาร์ดแวร์และซอฟต์แวร์ได้ง่าย
  • ฟังก์ชัน Hash ไม่ควรเป็นฟังก์ชันที่ย้อนกลับได้ คือ เมื่อทราบผลลัพธ์แล้วไม่มีทางทราบข้อมูลเลย
  • ฟังก์ชัน Hash ไม่ควรสร้างผลลัพธ์เดียวกันจากข้อมูลที่ต่างกัน y <> x เมื่อ H (x) = H (y)

Hash Function อย่างง่าย

ในทุกอัลกอริทึมของฟังก์ชัน Hash มักใช้หลักการทำงานเดียวกัน นั่นคือ การแบ่งข้อมูลออกเป็นบล็อกละเท่า ๆ กัน โดยสมมติว่ามีความยาว n บิต จากนั้นจะเริ่มทำงานตั้งแต่บล็อกข้อมูลแรก โดยนำมาผ่านฟังก์ชัน Hash ซึ่งจะได้ผลลัพธ์ออกมาชุดหนึ่ง จากนั้นโดยใช้ผลลัพธ์ที่ได้กับข้อมูลในบล็อกถัดไป เมื่อนำมาผ่านฟังก์ชัน Hash ก็จะได้ผลลัพธ์ใหม่ จากนั้นก็จะทำแบบเดิมกับบล็อกข้อมูลถัดไปเรื่อย ๆ จนหมด ก็จะได้ผลลัพธ์สุดท้าย ซึ่งก็คือ Message Digest นั่นเอง เช่น หากฟังก์ชัน Hash คือการทำ XOR ของทุกบิตในบล็อกแล้ว จะสามารถเขียนเป็นสมการทำงานได้ดังนี้

โดยรูปที่ 3 จะแสดงการทำงาน โดยจะเป็นการหาค่า Parity ของแต่ละบิต ที่เรียกว่า Longitude Redundancy Check ซึ่งจะได้ข้อมูลผลลัพธ์ความยาว n บิต เท่ากับบล็อกของข้อมูล อย่างไรก็ตามเนื่องจากวิธีการนี้เป็นวิธีการง่าย ๆ จึงอาจเกิดความผิดพลาดขึ้นได้ง่าย เพราะการใช้วิธี Parity นั้นหากมีบิตที่ผิดพลาดหลายบิต ก็อาจทำให้ได้ MD ที่มีค่าเท่ากันได้ง่าย ซึ่งไม่เป็นไปตามคุณสมบัติข้อที่ 5 ดังนั้นจึงไม่มีการนำไปใช้งานจริง แต่ใช้ในการอธิบายหลักการพื้นฐานเท่านั้น

รูปที่ 3

จากรูปที่ 3 ความผิดพลาดที่อาจเกิดขึ้น เช่น กรณีที่ใช้กับข้อมูลที่เป็นตัวอักษร ซึ่งบิตสูงสุดมักมีค่าเป็น 0 เสมอ ดังนั้นจึงมีค่า Hash จริง ๆ เพียง 7 ใน 8 เท่านั้น เช่น หากความยาว 128 บิต ก็จะมี Hash เพียง 112 บิต ซึ่งอาจแก้ไขง่าย ๆ โดยการให้มีการเลื่อนบิต ก่อนที่จะทำ XOR กับบล็อกถัดไป ซึ่งจะสามารถแก้ปัญหาการเกิดข้อมูลซ้ำ ๆ ได้ แต่ด้วยความไม่ซับซ้อนมากพอของ XOR ซึ่งเกิดข้อมูลซ้ำกันได้ง่ายเกินกว่าจะนำไปใช้งานได้

The SHA-1 Secure Hash Function

ในบรรดาฟังก์ชัน Hash ทั้งหลาย ฟังก์ชัน SHA-1 จัดว่าเป็นฟังก์ชันหนึ่งที่เป็นมาตรฐาน และมีการใช้งานกันอย่างกว้างขวาง โดย SHA ได้รับการพัฒนาโดย NIST โดยได้รับการประกาศเป็นมาตรฐาน FIPS PUB 180 ในปี 1993 โดยหลังจากนั้นมีการปรับปรุงเป็น SHA-1 ในปี 1995 โดยประกาศเป็นมาตรฐาน FIPS PUB 180–1

ฟังก์ชัน SHA-1 จะใช้บล็อกข้อมูลขนาด 512 บิต โดยสร้างผลลัพธ์ MD ความยาว 160 บิตคงที่ โดยการทำงานของฟังก์ชันนี้แสดงในรูปที่ 4

รูปที่ 4

ในขั้นตอนที่ 1 เติมบิต (padding) โดยจะมีการเติมบิตข้อมูลเพิ่มเติม โดยจะเพิ่มเป็นจำนวนเท่ากับ 512-เศษที่ได้จากการหาร 512 แล้วลบออก 64 บิต เนื่องจากจะมีการเพิ่มความยาวอีก 64 บิตในขั้นตอนที่ 2 ดังนั้นแม้ว่าบล็อกข้อมูลที่หารด้วย 512 ลงตัว ก็จะต้องมีการเติมบิตด้วยเช่นกัน

ในขั้นตอนที่ 2 จะมีการเพิ่มข้อมูลความยาว 64 บิต โดยจะเป็นข้อมูลที่ระบุความยาวของข้อมูล ก่อนที่จะมีการเติมบิตเข้าไป โดยการเพิ่มข้อมูลความยาวบิตเท่ากับ 64 บิตนี้ จะทำให้ความยาวของข้อมูลที่รวมกับการเติมบิตและเพิ่มอีก 64 บิต จะมีความยาวที่หารด้วย 512 ลงตัวพอดี ซึ่งหมายความว่าจะแบ่งเป็นบล็อกละ 512 บิตได้อย่างลงตัว

ในขั้นตอนที่ 3 จะมีการกำหนดค่าเริ่มต้นของ MD Buffer โดยมีความยาวเท่ากับ 160 บิต โดยบัฟเฟอร์นี้จะเก็บค่าเริ่มต้นของ MD จะแทนด้วยรีจิสเตอร์จำนวน 5 ตัว ตัวละ 32 บิต โดยมีชื่อเป็น A,B,C,D และ E โดยมีค่าเริ่มต้นคงที่ดังนี้ A= 67452301, B=EFCDAB89, C=98BADCFE , D=10325476, E= C3D2E1F0

ในขั้นตอนที่ 4 ซึ่งถือเป็นหัวใจของการทำงานทั้งหมด โดยจะมีการประมวลผลข้อมูลเป็นบล็อก ครั้งละ 512 บิต โดยกระทำเป็นรอบ ๆ จนกว่าข้อมูลจะหมด โดยแสดงขั้นตอนการทำงานไว้ในรูปที่ 5 โดยจะมีการทำงานทั้งหมด 4 รอบ โดยในแต่ละรอบจะประกอบด้วย 20 ขั้นตอนย่อย จากนั้นเมื่อผลลัพธ์ของทั้ง 4 รอบออกมา ก็จะมีการนำไปบวกเข้ากับข้อมูล CV ที่เข้ามาอีกที ก็จะได้เป็น Message Digest ของบล็อกนั้นจากนั้น MD ก็จะใช้ในการประมวลผลข้อมูลในบล็อกถัดไปจนหมด ก็จะได้ MD สุดท้ายที่ความยาว 160 บิตออกมา

รูปที่ 5

สำหรับการทำงานในแต่ละรอบจะมีรายละเอียดของการทำงานตามรูปที่ 6

รูปที่ 6 แสดงรายละเอียดแต่ละรอบของการทำงาน

โดยเครื่องหมาย S จะหมายถึงการ Shift ตามจำนวนบิตที่กำกับไว้ สำหรับ K คือ ค่าที่นำมาบวก โดยค่าที่กำหนดไว้สำหรับบวกแต่ละรอบ คือ 5A827999, 6ED9EBA1, 8F1BBCDC และ CA62C1D6 สำหรับค่า W เป็นข้อมูล 32 บิตที่ดึงมาจากส่วนของ 512 บิตจาก Input Block โดยคำนวณจากสูตร

โดย W ได้มาจาก Word ในแต่ละรอบของ t ซึ่งจะมีทั้งหมด 16 Word สำหรับ Ft นั้น เป็นฟังก์ชันที่จะใช้ในแต่ละรอบของการทำงาน

จากอัลกอริทึมจะเห็นได้ว่าผลลัพธ์ที่ได้ในแต่ละบิต จะเกิดจากอินพุตในแต่ละบิต โดยในแต่ละรอบการทำงาน มีการทำงานที่ซับซ้อน ซึ่งจะต่างกับการใช้ฟังก์ชันง่าย ๆ อย่าง XOR โดย SHA-1 จะมีความเป็นไปได้ที่ข้อความ 2 ข้อความที่มี MD เดียวกัน เท่ากับ 2 ยกกำลัง 80 และมีความยากในการหาข้อความที่มี MD ที่ได้เท่ากับ 2 ยกกำลัง 160 ซึ่งถือว่ามีความปลอดภัยในการใช้งานมากเพียงพอ

ฟังก์ชัน Hash อื่น ๆ

นอกเหนือจาก SHA-1 ซึ่งเป็นอัลกอริทึมมาตรฐานของ NIST แล้ว ยังมีฟังก์ชัน Hash อื่น ๆ ที่มีการออกแบบและใช้งานด้วยเช่นกัน โดยเฉพาะอัลกอริทึม MD5 ที่ออกแบบโดย Ron Rivest นั้นมีการนำไปใช้งานมากพอ ๆ กับ SHA-1 เลยทีเดียว เรียกได้ว่าในแอปพลิเคชันใดที่ใช้งานกับ SHA-1 ได้ ก็มักจะมีทางเลือกให้ใช้ MD5 ด้วยเสมอ

อัลกอริทึม MD5

อัลกอริทึมนี้มีชื่อว่า MD5 Message Digest Algorithm โดยพัฒนาขึ้นโดย Ron Rivest ซึ่งได้ประกาศเป็นมาตรฐาน RFC 1321 โดย MD5 จะมีการแบ่งข้อมูลอินพุตออกเป็นบล็อกละ 512 บิต โดยจะสร้างผลลัพธ์ขนาด 128 บิต สำหรับการเปรียบเทียบระหว่างอัลกอริทึมต่าง ๆ แสดงไว้ในรูปที่ 7 โดยสำหรับอัลกอริทึม MD5 นี้มีการใช้งานที่กว้างขวาง แต่สำหรับในปัจจุบันที่ความเร็วของโพรเซสเซอร์เพิ่มขึ้นมาก ความยาวของผลลัพธ์เพียง 128 บิต เริ่มมีการมองว่ามีความปลอดภัยน้อยเกินไป เพราะ MD5 จะมีความเป็นไปได้ที่ข้อความ 2 ข้อความที่มี MD เดียวกัน เท่ากับ 2 ยกกำลัง 64 และมีความยากในการหาข้อความที่มี MD ที่ได้เท่ากับ 2 ยกกำลัง 128 โดยมีรายงานการโจมตี MD5 หลายครั้งที่แสดงว่า MD5 อาจมีการโจมตีได้

รูปที่ 7 เปรียบเทียบ Hash Algorithm

RIPEMD-160

อัลกอริทึม RIPEMD-160 เป็นอัลกอริทึมที่พัฒนาขึ้นมาภายใต้โครงงาน European RACE Integrity Primitive Evaluation (RIPE) โดยกลุ่มนักวิจัยที่ประสบความสำเร็จจากการโจมตี MD4 และ MD5 โดยเริ่มแรกพัฒนาออกมาในเวอร์ชัน 128 บิตก่อน และหลังจากโครงงาน RIPE จบลง H. Dobbertin ก็สามารถหาวิธีโจมตี RIPEMD ได้สำเร็จ และหลังเหตุการณ์นั้น ทางผู้พัฒนาของ RIPE ก็ได้ปรับปรุง RIPEMD โดยอาศัยทีมงานเก่าและโดยความร่วมมือของ Dobbertin จึงได้ออกมาเป็น RIPEMD-160 โดยมีโครงสร้างการทำงานคล้ายกับ SHA-1 โดยให้ผลลัพธ์เป็น Message Digest ขนาด 160 บิต โดยมีการแบ่งบล็อกข้อมูลอินพุตออกเป็นบล็อกละ 512 บิต

สรุป

ในปัจจุบัน ฟังก์ชัน Hash ใหม่ๆ ได้รับการพัฒนาอย่างต่อเนื่อง เช่น ในกลุ่ม SHA ก็มีการพัฒนาเป็น SHA-2 ซึ่งมีความยาว 224,256,384 และ 512 บิต ให้เลือกใช้งาน ซึ่งมีความปลอดภัยเพิ่มขึ้น และมีการพัฒนาต่อเป็น SHA-3 ซึ่งเป็นมาตรฐานที่ได้รับความเชื่อถือในด้านความปลอดภัยมาก แต่ MD5 ก็ยังมีการใช้งานในงานทั่วไปที่ไม่ต้องการความปลอดภัยมากนัก

ปล.

  • บทความนี้จัดทำไว้นานแล้ว เนื้อหาบางส่วนอาจล้าสมัย
  • รูปภาพมาจากหนังสือ Network Security Essentials ของ William Stallings สำหรับเนื้อหาก็เรียบเรียงจากหนังสือเล่มเดียวกัน

--

--

Thana Hongsuwan
Thana Hongsuwan

Written by Thana Hongsuwan

Maker สมัครเล่น สนใจเทคโนโลยีด้าน Hardware เช่น Arduino, ESP8266, ESP32, Internet of Things, Raspberry P, Deep Learning

No responses yet