Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การแฮชแบบมีคีย์สำหรับการยืนยันข้อความใน Python (HMAC)

การยืนยันข้อความโดยใช้ฟังก์ชันแฮชทางเข้ารหัสใน Python สามารถทำได้ผ่านกลไก HMAC เราสามารถใช้ HMAC กับฟังก์ชันแฮชที่วนซ้ำได้หลายตัว เช่น MD5, SHA-1 ร่วมกับคีย์ลับที่แชร์ร่วมกัน

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

ไวยากรณ์

hmac.new(key, msg=None, digestmod=None)

คืนค่าออบเจกต์ hmac ใหม่

ที่:

  • Key – คีย์ลับที่แชร์ร่วมกัน
  • Msg – ข้อความที่จะแฮช
  • Digestmod – ชื่อ digest หรือโมดูลสำหรับออบเจกต์ HMAC ใช้

เมธอดและแอตทริบิวต์ของโมดูล HMAC:

  • hmac.update(message) - ใช้เพื่ออัปเดตออบเจกต์ hmac โดยใช้ข้อความที่กำหนด ข้อความจะถูกต่อท้ายหากเรียกเมธอดนี้มากกว่าหนึ่งครั้ง
  • hmac.digest() - คืนค่า digest ของไบต์ที่ส่งผ่านเมธอด update() จนถึงตอนนี้
  • hashlib.hexdigest() - เหมือน digest() แต่ digest จะคืนค่าเป็นสตริงยาวสองเท่า มีเฉพาะตัวเลขฐานสิบหก ใช้แลกเปลี่ยนค่าได้อย่างปลอดภัยในอีเมลหรือสภาพแวดล้อมที่ไม่ใช่ไบนารี
  • hashlib.copy() - คืนค่าสำเนา ("clone") ของออบเจกต์ hmac

ตัวอย่าง 1

สร้างแฮช โดยใช้อัลกอริทึม MD5 เริ่มต้น

# Import libraries
import hashlib
import hmac

# data update_bytes
update_bytes = b'Lorem ipsum dolor sit amet, consectetur adipiscing elit. \
    Suspendisse tristique condimentum viverra. Nulla accumsan \
    orci risus, non congue lacus feugiat id.'

# secret key
password = b'402xy5#'

# Generate cryptographic hash using md5
my_hmac = hmac.new(update_bytes, password, hashlib.md5)
print("The first digest: " + str(my_hmac.digest()))
print("The Canonical Name: " + my_hmac.name)
print("Block size: " + str(my_hmac.block_size) + "bytes")
print("Digest size: " + str(my_hmac.digest_size) + "bytes")

# Create a copy of the hmac object
my_hmac_cpy = my_hmac.copy()
print("The Copied digest: " + str(my_hmac_cpy.digest()))

ผลลัพธ์

The first digest: b'H\xcc.nf\xdd\x8bC\x8di\x0cC\xb8\xe9l\xa8'
The Canonical Name: hmac-md5
Block size: 64bytes
Digest size: 16bytes
The Copied digest: b'H\xcc.nf\xdd\x8bC\x8di\x0cC\xb8\xe9l\xa8'

เนื่องจาก SHA1 ถูกพิจารณาว่าปลอดภัยกว่า MD5 และหากคุณคิดว่าจะรันโปรแกรมข้างต้นด้วยอัลกอริทึม SHA1 ให้เปลี่ยนชื่ออัลกอริทึมในบรรทัดนี้:

my_hmac = hmac.new(update_bytes, password, hashlib.sha1)

และผลลัพธ์จะเป็นประมาณ:

The first digest: b'\xc3T\xe7[\xc8\xa3O/$\xbd`A\xad\x07d\xe8\xae\xa2!\xb4'

The Canonical Name: hmac-sha1
Block size: 64bytes
Digest size: 20bytes
The Copied digest: b'\xc3T\xe7[\xc8\xa3O/$\xbd`A\xad\x07d\xe8\xae\xa2!\xb4'

การประยุกต์ใช้

กลไกการยืนยัน HMAC สามารถใช้ได้ในทุกที่ที่ความปลอดภัยสำคัญ เช่น บริการเครือข่ายสาธารณะ ตัวอย่างเช่น ในเครือข่ายสาธารณะ เราส่งไฟล์/ข้อมูลสำคัญผ่าน pipe หรือ socket ไฟล์/ข้อมูลนั้นควรเซ็นชื่อ และลายเซ็นควรทดสอบก่อนที่ข้อมูลจะถูกใช้