Siphash adalah keluarga fungsi semu (PRF) yang dioptimalkan untuk kecepatan pada pesan pendek. Ini adalah kode C referensi Siphash: portabel, sederhana, dioptimalkan untuk kejelasan dan debugging.
Siphash dirancang pada tahun 2012 oleh Jean-Philippe Aumasson dan Daniel J. Bernstein sebagai pertahanan terhadap serangan DOS yang membanjiri hash.
Siphash adalah:
Lebih sederhana dan lebih cepat pada pesan pendek dari algoritma kriptografi sebelumnya, seperti Mac berdasarkan hashing universal.
Kompetitif dalam kinerja dengan algoritma non-kripografi yang tidak aman, seperti FHHASH.
Aman secara kriptografis , tanpa tanda -tanda kelemahan meskipun ada banyak proyek analisis kriptan oleh para kriptografer terkemuka.
Diuji pertempuran , dengan integrasi yang berhasil di OSS (Linux Kernel, OpenBSD, Freebsd, Freertos), bahasa (Perl, Python, Ruby, dll.), Perpustakaan (OpenSSL Libcrypto, Sodium, dll.) Dan aplikasi (Wireguard, Redis, dll.).
Sebagai fungsi pseudorandom yang aman (alias fungsi hash terkunci), Siphash juga dapat digunakan sebagai kode otentikasi pesan yang aman (Mac). Tapi Siphash bukanlah hash dalam arti fungsi hash tanpa-guna umum seperti Blake3 atau SHA-3. Karena itu, Siphash harus selalu digunakan dengan kunci rahasia agar aman.
Siphash default adalah Siphash-2-4 : Dibutuhkan kunci 128-bit, melakukan 2 putaran kompresi, 4 putaran finalisasi, dan mengembalikan tag 64-bit.
Varian dapat menggunakan jumlah putaran yang berbeda. Sebagai contoh, kami mengusulkan Siphash-4-8 sebagai versi konservatif.
Versi berikut tidak dijelaskan dalam makalah tetapi dirancang dan dianalisis untuk memenuhi kebutuhan aplikasi:
Siphash-128 mengembalikan tag 128-bit, bukan 64-bit. Versi dengan jumlah putaran yang ditentukan adalah Siphash-2-4-128, Siphash4-8-128, dan sebagainya.
Halfsiphash bekerja dengan kata-kata 32-bit, bukan 64-bit, mengambil kunci 64-bit, dan mengembalikan tag 32-bit atau 64-bit. Misalnya, Halfsiphash-2-4-32 memiliki 2 putaran kompresi, 4 putaran finalisasi, dan mengembalikan tag 32-bit.
(Setengah) Siphash- C - D dengan C ≥ 2 dan D ≥ 4 diharapkan dapat memberikan keamanan PRF maksimum untuk fungsi apa pun dengan kunci dan ukuran output yang sama.
Sasaran keamanan PRF standar memungkinkan penyerang akses ke output Siphash pada pesan yang dipilih secara adaptif oleh penyerang.
Keamanan dibatasi oleh ukuran kunci (128 bit untuk siphash), sehingga penyerang yang mencari kunci 2 memiliki peluang 2 s −128 menemukan kunci siphash. Keamanan juga dibatasi oleh ukuran output. Secara khusus, ketika Siphash digunakan sebagai Mac, penyerang yang secara membabi buta mencoba tag 2 S akan berhasil dengan probabilitas 2 s - t , jika t adalah ukuran bit tag itu.
Berlari
makeakan membangun tes untuk
./ testmemverifikasi 64 vektor uji, dan
./ debugmelakukan nilai menengah yang sama dan mencetak.
Kode ini dapat diadaptasi untuk mengimplementasikan siphash- c - d , versi Siphash dengan putaran kompresi C dan putaran finalisasi D , dengan mendefinisikan cROUNDS atau dROUNDS saat dikompilasi. Ini dapat dilakukan dengan argumen baris perintah -D untuk banyak kompiler seperti di bawah ini.
gcc -Wall --std=c99 -DcROUNDS=2 -DdROUNDS=4 siphash.c halfsiphash.c test.c -o test makefile juga mengambil nilai putaran C dan D sebagai parameter.
make cROUNDS=2 dROUNDS=4Jelas, jika jumlah putaran dimodifikasi maka vektor uji tidak akan memverifikasi.
Kode ini adalah Hak Cipta (C) 2014-2023 Jean-Philippe Aumasson, Daniel J. Bernstein. Itu multi-lisensi di bawah