Siphash เป็นตระกูลของฟังก์ชั่น Pseudorandom (PRFs) ที่ได้รับการปรับให้เหมาะสมสำหรับความเร็วในข้อความสั้น ๆ นี่คือรหัสอ้างอิง C ของ Siphash: แบบพกพาง่ายปรับให้เหมาะสมเพื่อความชัดเจนและการดีบัก
Siphash ได้รับการออกแบบในปี 2012 โดย Jean-Philippe Aumasson และ Daniel J. Bernstein เพื่อป้องกันการโจมตี Dos Hash-Flooding
Siphash คือ:
ง่ายขึ้นและเร็วขึ้น ในข้อความสั้น ๆ กว่าอัลกอริทึมการเข้ารหัสก่อนหน้านี้เช่น MACs ตามการแฮชสากล
การแข่งขันในการปฏิบัติงาน ด้วยอัลกอริทึมที่ไม่ปลอดภัยที่ไม่ปลอดภัยเช่น FHHASH
ปลอดภัยในการเข้ารหัส โดยไม่มีวี่แววของความอ่อนแอแม้จะมีโครงการ cryptanalysis หลายโครงการโดยนักเข้ารหัสชั้นนำ
ทดสอบการต่อสู้ ด้วยการรวมที่ประสบความสำเร็จใน OSS (Linux Kernel, OpenBSD, FreeBSD, Freertos), ภาษา (Perl, Python, Ruby, ฯลฯ ), ห้องสมุด (OpenSSL Libcrypto, โซเดียม ฯลฯ ) และแอปพลิเคชัน (Wireguard, Redis ฯลฯ )
ในฐานะที่เป็นฟังก์ชัน pseudorandom ที่ปลอดภัย (ฟังก์ชั่นแฮชคีย์ที่เรียกว่า siphash สามารถใช้เป็นรหัสการตรวจสอบข้อความที่ปลอดภัย (MAC) แต่ Siphash ไม่ใช่แฮช ในแง่ของฟังก์ชั่นแฮชคีย์ที่ไม่มีจุดประสงค์ทั่วไปเช่น Blake3 หรือ SHA-3 ดังนั้นจึงควรใช้ Siphash กับคีย์ลับเพื่อให้ปลอดภัย
Siphash เริ่มต้นคือ Siphash-2-4 : ใช้คีย์ 128 บิตทำ 2 รอบการบีบอัด 4 รอบสุดท้าย 4 รอบและส่งคืนแท็ก 64 บิต
ตัวแปรสามารถใช้จำนวนรอบที่แตกต่างกัน ตัวอย่างเช่นเราเสนอ Siphash-4-8 เป็นรุ่นอนุรักษ์นิยม
เวอร์ชันต่อไปนี้ไม่ได้อธิบายไว้ในกระดาษ แต่ได้รับการออกแบบและวิเคราะห์เพื่อตอบสนองความต้องการของแอปพลิเคชัน:
Siphash-128 ส่งคืนแท็ก 128 บิตแทน 64 บิต เวอร์ชันที่มีจำนวนรอบที่ระบุคือ Siphash-2-4-128, Siphash4-8-128 และอื่น ๆ
Halfsiphash ทำงานกับคำ 32 บิตแทน 64 บิตใช้คีย์ 64 บิตและส่งคืนแท็ก 32 บิตหรือ 64 บิต ตัวอย่างเช่น Halfsiphash-2-4-32 มี 2 รอบการบีบอัด 4 รอบสุดท้าย 4 รอบและส่งคืนแท็ก 32 บิต
(ครึ่ง) Siphash- c - d กับ C ≥ 2 และ D ≥ 4 คาดว่าจะให้ความปลอดภัย PRF สูงสุดสำหรับฟังก์ชั่นใด ๆ ที่มีคีย์และขนาดเอาท์พุทเดียวกัน
เป้าหมายการรักษาความปลอดภัย PRF มาตรฐานช่วยให้ผู้โจมตีสามารถเข้าถึงเอาต์พุตของ Siphash บนข้อความที่เลือกโดยผู้โจมตี
ความปลอดภัยถูก จำกัด ด้วยขนาดคีย์ (128 บิตสำหรับ Siphash) เช่นที่ผู้โจมตีค้นหาปุ่ม 2 วินาที มีโอกาส 2 วินาที −128 ในการค้นหาปุ่ม Siphash ความปลอดภัยยังถูก จำกัด ด้วยขนาดเอาต์พุต โดยเฉพาะอย่างยิ่งเมื่อ Siphash ถูกใช้เป็น Mac ผู้โจมตีที่พยายามแท็ก 2 วินาที จะประสบความสำเร็จด้วยความน่าจะเป็น 2 วินาที ถ้า T คือขนาดบิตของแท็กนั้น
วิ่ง
makeจะสร้างการทดสอบสำหรับ
./ testตรวจสอบเวกเตอร์ทดสอบ 64 ตัวและ
./ debugทำเช่นเดียวกันและพิมพ์ค่ากลาง
รหัสสามารถปรับให้เข้ากับการใช้งาน siphash- c - d , เวอร์ชันของ siphash กับรอบการบีบอัด C และรอบสุดท้าย D โดยการกำหนด cROUNDS หรือ dROUNDS เมื่อรวบรวม สามารถทำได้ด้วยอาร์กิวเมนต์บรรทัดคำสั่ง -D ไปยังคอมไพเลอร์จำนวนมากเช่นด้านล่าง
gcc -Wall --std=c99 -DcROUNDS=2 -DdROUNDS=4 siphash.c halfsiphash.c test.c -o test makefile ยังใช้ค่า C และ D รอบเป็นพารามิเตอร์
make cROUNDS=2 dROUNDS=4เห็นได้ชัดว่าหากจำนวนรอบได้รับการแก้ไขแล้วเวกเตอร์ทดสอบจะไม่ตรวจสอบ
รหัสนี้เป็นลิขสิทธิ์ (c) 2014-2023 Jean-Philippe Aumasson, Daniel J. Bernstein มันมีหลายใบอนุญาตภายใต้