Siphash هي عائلة من وظائف pseudorandom (PRFS) محسّنة للسرعة في الرسائل القصيرة. هذا هو رمز C المرجعي لـ Siphash: محمول وبسيط ومحسّن للوضوح والتصحيح.
تم تصميم Siphash في عام 2012 من قبل Jean-Philippe Aumasson و Daniel J. Bernstein كدفاع ضد هجمات DOS التي تقلب التجزئة.
Siphash هو:
أبسط وأسرع في الرسائل القصيرة من خوارزميات التشفير السابقة ، مثل Macs استنادًا إلى التجزئة العالمية.
تنافسية في الأداء مع الخوارزميات غير الآمنة غير الصلبة ، مثل FHHASH.
آمنة تشفيرًا ، مع عدم وجود علامة على الضعف على الرغم من مشاريع التحليل المشفرة المتعددة من خلال قيادة المشفرات.
تم اختبار المعركة ، مع التكامل الناجح في OSS (Linux kernel ، OpenBSD ، Freebsd ، Freertos) ، اللغات (Perl ، Python ، Ruby ، إلخ) ، المكتبات (Openssl libcrypto ، الصوديوم ، إلخ) والتطبيقات (Wireguard ، Redis ، إلخ).
كدالة آمنة pseudorandom (AKA keyed hash وظيفة) ، يمكن أيضًا استخدام Siphash كرمز مصادقة للرسالة الآمن (MAC). لكن Siphash ليس تجزئة بمعنى وظيفة التجزئة غير المفتاحية للأغراض العامة مثل Blake3 أو SHA-3. لذلك يجب أن يتم استخدام Siphash دائمًا بمفتاح سري من أجل أن يكون آمنًا.
إن السيفاش الافتراضي هو Siphash-2-4 : يتطلب الأمر مفتاحًا 128 بت ، ويقوم بجولات ضغط 2 ، و 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 على جولتين ضغط ، و 4 جولات للانتهاء ، ويعيد علامة 32 بت.
(نصف) من المتوقع أن يوفر Siphash- C - D مع C ≥ 2 و D ≥ 4 أقصى أمان PRF لأي وظيفة مع نفس المفتاح وحجم الإخراج.
يسمح هدف أمان PRF القياسي للمهاجم وصول المهاجم إلى إخراج Siphash على الرسائل التي اختارها المهاجم بشكل تكيفي.
يقتصر الأمان على حجم المفتاح (128 بت لـ Siphash) ، بحيث يكون للمهاجمين الذين يبحثون عن مفاتيح 2 S فرصة 2 S −128 للعثور على مفتاح Siphash. يقتصر الأمان أيضًا على حجم الإخراج. على وجه الخصوص ، عندما يتم استخدام Siphash ك Mac ، فإن المهاجم الذي يحاول عمياء 2 S سينجح مع الاحتمال 2 s - t ، إذا كان 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. يتم تخصيصه تحت