ตัวสร้างแฮช SHA-1

ดูไดเจสต์ SHA-1 ขนาด 160 บิตของข้อความ ไบต์เลขฐานสิบหก หรือไฟล์ได้ทันทีขณะพิมพ์ ตรวจสอบกับเช็กซัมที่เผยแพร่ไว้ และดู SHA-256, SHA-512 และ MD5 ของอินพุตเดียวกันได้ในพริบตา

อัลกอริทึมทั้งหมด

ทำงานภายในเบราว์เซอร์ของคุณทั้งหมด ไม่มีการอัปโหลดข้อมูลใด ๆ

วิธีใช้งาน

  1. ป้อนข้อความ ตั้ง “รูปแบบอินพุต” เป็น “เลขฐานสิบหก” เพื่อป้อนไบต์ หรือคลิก “เปิดไฟล์”
  2. SHA-1 ถูกเลือกไว้ล่วงหน้าแล้ว เปลี่ยน “อัลกอริทึม” ได้หากต้องการเปรียบเทียบกับฟังก์ชันแฮชอื่น
  3. เลือก “hex (ตัวพิมพ์เล็ก)” (แบบที่ sha1sum และ Git แสดง) “HEX (ตัวพิมพ์ใหญ่)” หรือ Base64
  4. วาง SHA-1 ที่คาดไว้ลงในช่อง “เปรียบเทียบกับ” หน้าเว็บจะแสดง “ตรงกัน” หรือ “ไม่ตรงกัน”

SHA-1 คืออะไร

SHA-1 (Secure Hash Algorithm 1) ออกแบบโดย NSA และเผยแพร่โดย NIST ในปี 1995 เป็น FIPS 180-1 เพื่อแทนที่ SHA-0 ซึ่งถูกใช้งานอยู่เพียงช่วงสั้น ๆ ปัจจุบัน SHA-1 กำหนดไว้ใน FIPS 180-4 และ RFC 3174 อธิบายอัลกอริทึมนี้พร้อมโค้ดภาษา C ตัวอย่าง SHA-1 ประมวลผลบล็อกขนาด 512 บิตใน 80 รอบ และให้ไดเจสต์ขนาด 160 บิต คือเลขฐานสิบหก 40 อักขระหรือ Base64 28 อักขระ

SHA-1 เป็นฟังก์ชันทางเดียวเช่นเดียวกับแฮชทุกชนิด ไดเจสต์ถอดรหัสไม่ได้ ทำได้เพียงหาค่าที่ตรงกันด้วยการแฮชค่าที่เดาแล้วนำมาเทียบ นี่คือวิธีที่แฮชรหัสผ่าน SHA-1 แบบไม่ใช้ salt ซึ่งรั่วไหลจาก LinkedIn ในปี 2012 ถูกแคร็กออกมาได้เป็นจำนวนมาก รหัสผ่านควรจัดเก็บด้วย Argon2, scrypt, bcrypt หรือ PBKDF2

SHAttered: เหตุผลที่ SHA-1 ถูกเลิกใช้

ในเดือนกุมภาพันธ์ 2017 นักวิจัยจาก CWI Amsterdam และ Google เผยแพร่ SHAttered ซึ่งเป็นการชนกันของ SHA-1 ครั้งแรกที่เกิดขึ้นจริง ได้แก่ไฟล์ PDF สองไฟล์ที่ต่างกันแต่มีแฮชเดียวกัน โดยใช้การคำนวณ SHA-1 ราว 2^63 ครั้ง ต่อมาในปี 2020 Gaëtan Leurent และ Thomas Peyrin (งานวิจัย “SHA-1 is a Shambles”) ใช้การชนกันแบบเลือกส่วนนำหน้า (chosen-prefix) สาธิตการปลอมลายเซ็น SHA-1 บนคีย์ PGP ด้วยต้นทุนที่ผู้โจมตีซึ่งมีเงินทุนสูงสามารถจ่ายได้

  • CA สาธารณะหยุดออกใบรับรอง TLS แบบ SHA-1 ในปี 2016 และเบราว์เซอร์เลิกเชื่อถือใบรับรองเหล่านี้ในช่วงต้นปี 2017
  • NIST ไม่อนุญาตให้ใช้ SHA-1 กับลายเซ็นดิจิทัลใหม่ตั้งแต่ปี 2013 และวางแผนจะยุติการใช้งานทั้งหมดภายในสิ้นปี 2030
  • รีโพสิทอรี Git ส่วนใหญ่ยังคงระบุออบเจกต์ด้วย SHA-1 ซึ่งคำนวณด้วยโค้ดเวอร์ชันเสริมความปลอดภัยที่ตรวจจับความพยายามสร้างการชนกันได้ และ Git ยังสร้างรีโพสิทอรีที่ใช้ SHA-256 ได้ด้วย

การชนกันไม่ได้ทำให้ HMAC ใช้ไม่ได้ จึงยังพบ HMAC-SHA1 ในรหัส TOTP และลายเซ็นเว็บฮุกรุ่นเก่า ซึ่งคำนวณได้ด้วย ตัวสร้าง HMAC สำหรับงานใหม่ทุกประเภท ให้เลือก SHA-256

ID ออบเจกต์ของ Git, Base64 และการเข้ารหัสอักขระ

ID ของ blob ใน Git ไม่ใช่ SHA-1 ของไฟล์เพียงอย่างเดียว Git จะแฮชส่วนหัวซึ่งประกอบด้วย blob ช่องว่าง ขนาดเป็นไบต์ และไบต์ศูนย์ ตามด้วยเนื้อหาของไฟล์ หากต้องการคำนวณค่านี้ในหน้านี้ ให้ตั้ง “รูปแบบอินพุต” เป็น “เลขฐานสิบหก” และใส่ไบต์ของส่วนหัวนั้นด้วย สำหรับ hello ตามด้วยอักขระขึ้นบรรทัดใหม่ อินพุตเลขฐานสิบหกคือ 626c6f6220360068656c6c6f0a

$ printf 'hello\n' | sha1sum
f572d396fae9206628714fb2ce00f72e94f2258f  -
$ printf 'hello\n' | git hash-object --stdin
ce013625030ba8dba906f756967f9e9ca394464a

SHA-1 มักแสดงเป็นเลขฐานสิบหกตัวพิมพ์เล็ก ส่วน Base64 พบได้ในการแฮนด์เชกของ WebSocket ซึ่ง Sec-WebSocket-Accept คือ SHA-1 ในรูป Base64 ของคีย์ฝั่งไคลเอนต์ต่อด้วย GUID ค่าคงที่ และพบในค่ารหัสผ่าน {SHA} ของ LDAP อย่าลืมว่าแฮชคำนวณจากไบต์ ข้อความที่มีตัวอักษรกำกับเครื่องหมายเน้นเสียงจะมี SHA-1 ค่าหนึ่งใน UTF-8 และอีกค่าหนึ่งใน Windows-1252

SHA-1 ในบรรทัดคำสั่งและในโค้ด

sha1sum file.zip                          # Linux
shasum file.zip                           # macOS (ค่าเริ่มต้นคือ SHA-1)
certutil -hashfile file.zip SHA1          # Windows
Get-FileHash file.zip -Algorithm SHA1     # PowerShell

# Python
hashlib.sha1(data).hexdigest()

// Node.js
crypto.createHash('sha1').update(data).digest('hex')

หน้านี้คำนวณ SHA-1 ด้วย Web Crypto API ที่มีอยู่ในเบราว์เซอร์ของคุณ อินพุตจึงไม่ออกไปจากอุปกรณ์ของคุณ ตาราง “อัลกอริทึมทั้งหมด” แสดงค่า MD5, SHA-256, SHA-384, SHA-512 และ CRC ของอินพุตเดียวกัน

ตัวอย่าง

อินพุต (UTF-8)SHA-1
Hello, World!0a0a9f2a6772942557ab5355d76af442f8f65e01
Base64.is6c667ee2efd2020349eed40efa07c26683f613c8
你好440ee0853ad1e99f962b63e459ef992d7c211722

คำถามที่พบบ่อย

SHA-1 ยังปลอดภัยที่จะใช้อยู่หรือไม่

ไม่ปลอดภัยในงานที่ผู้โจมตีเลือกหรือมีอิทธิพลต่ออินพุตได้ เช่น ลายเซ็นและใบรับรอง เพราะสามารถสร้างการชนกันของ SHA-1 ได้ แต่ SHA-1 ยังตรวจจับความเสียหายที่เกิดโดยไม่ตั้งใจได้ และ HMAC-SHA1 ไม่ได้รับผลกระทบจากการชนกัน สำหรับงานใหม่ให้ใช้ SHA-256 หรือ SHA-512

ย้อนกลับแฮช SHA-1 ได้หรือไม่

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

แฮช SHA-1 ยาวเท่าใด
160 บิต หรือ 20 ไบต์ คือเลขฐานสิบหก 40 อักขระ หรือ Base64 28 อักขระที่ลงท้ายด้วย = หนึ่งตัว RIPEMD-160 มีความยาวเท่ากัน และแฮชรหัสผ่านของ MySQL 4.1 ขึ้นไปคือเครื่องหมายดอกจันตามด้วยเลขฐานสิบหก 40 อักขระ เครื่องมือระบุชนิดแฮชจะแสดงรายการอัลกอริทึมที่เป็นไปได้ของสตริงที่ป้อน
จะตรวจสอบไฟล์กับค่า SHA-1 ที่เผยแพร่ไว้ได้อย่างไร

คลิก “เปิดไฟล์” แล้ววางค่าที่เผยแพร่ไว้ลงในช่อง “เปรียบเทียบกับ” รองรับทั้งเลขฐานสิบหกตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็ก และ Base64 หน้าเว็บจะแสดง “ตรงกัน” หรือ “ไม่ตรงกัน”

SHA-1 กับ SHA-256 ต่างกันอย่างไร

ทั้งสองเผยแพร่โดย NIST แต่ SHA-256 อยู่ในตระกูล SHA-2 ที่ใหม่กว่า มีเอาต์พุต 256 บิต และยังไม่มีการโจมตีที่ใช้ได้จริง ส่วน SHA-1 มีเอาต์พุตสั้นกว่า และความทนทานต่อการชนกันถูกเจาะได้แล้ว