سالسا 20
وظيفة ربع الدائرة في السالسا. أربع نسخ متوازية تشكل دائرة. | |
| عام | |
|---|---|
| المصممين | دانييل ج. بيرنشتاين |
| نُشرت لأول مرة | 2007 (صممت عام 2005) [1] |
| خلفاء | تشاتشا |
| ذات صلة ب | رومبا 20 |
| شهادة | محفظة eSTREAM |
| تفاصيل الشفرة | |
| أحجام المفاتيح | 128 أو 256 بت |
| حجم الدولة | 512 بت |
| بناء | أركس |
| جولات | 20 |
| سرعة | 3.91 cpb على Intel Core 2 Duo [2] |
| أفضل تحليل تشفير عام | |
| في عام 2008، نجحت عملية تحليل الشفرات في كسر 8 جولات من أصل 20 جولة لاستعادة المفتاح السري المكون من 256 بت في 2251 عملية ، باستخدام 231 زوجًا من مفاتيح التدفق. [3] | |
Salsa20 و ChaCha ذات الصلة الوثيقة عبارة عن تشفيرات تدفقية طورها Daniel J. Bernstein . تم تصميم Salsa20، التشفير الأصلي، في عام 2005، ثم تم تقديمه لاحقًا إلى عملية التحقق من التشفير eSTREAM التابعة للاتحاد الأوروبي بواسطة Bernstein. ChaCha هو تعديل لـ Salsa20 نُشر في عام 2008. يستخدم وظيفة دائرية جديدة تزيد من الانتشار وتزيد الأداء في بعض البنيات. [4]
تم بناء كل من الشفرات على وظيفة شبه عشوائية تعتمد على عمليات إضافة وتدوير وXOR (ARX) - عمليات إضافة 32 بت وإضافة بتية (XOR) والتدوير . تقوم الوظيفة الأساسية بربط مفتاح 256 بت ورقم عشوائي 64 بت وعداد 64 بت بكتلة 512 بت من مجرى المفتاح (توجد أيضًا نسخة Salsa بمفتاح 128 بت). يمنح هذا Salsa20 وChaCha الميزة غير العادية المتمثلة في أنه يمكن للمستخدم البحث بكفاءة عن أي موضع في مجرى المفتاح في وقت ثابت. يوفر Salsa20 سرعات تتراوح بين 4 إلى 14 دورة لكل بايت في البرامج على معالجات x86 الحديثة، [5] وأداء أجهزة معقول. إنه ليس حاصلًا على براءة اختراع، وقد كتب بيرنشتاين العديد من تطبيقات المجال العام المحسّنة للهندسة المعمارية الشائعة. [6]
بناء
داخليًا، يستخدم التشفير إضافة بتية ⊕ ( أو حصرية )، وإضافة 32 بت mod 2 32 ⊞، وعمليات تدوير بمسافة ثابتة <<< على حالة داخلية من ست عشرة كلمة من 32 بت. إن استخدام عمليات الإضافة والتدوير والتكرار فقط يتجنب إمكانية حدوث هجمات توقيت في تطبيقات البرامج. تتكون الحالة الداخلية من ست عشرة كلمة من 32 بت مرتبة في مصفوفة 4×4.
| 0 | 1 | 2 | 3 |
| 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 |
تتكون الحالة الأولية من ثماني كلمات رئيسية ( )، كلمتين لموضع التيار ( )، كلمتين من nonce (بتات موضع تدفق إضافية بشكل أساسي) ( )، وأربع كلمات ثابتة ( ):
| "إكسبا" | مفتاح | مفتاح | مفتاح |
| مفتاح | "الثانية 3" | رقم نونس | رقم نونس |
| موقف. | موقف. | "2 بواسطة" | مفتاح |
| مفتاح | مفتاح | مفتاح | "تي ك" |
الكلمات الثابتة تكتب "expand 32-byte k" في ASCII (أي أن الكلمات الأربع هي "expa" و"nd 3" و"2-by" و"te k"). هذا مثال على رقم غير واضح . العملية الأساسية في Salsa20 هي ربع الدائرة QR(a, b, c, d)التي تأخذ مدخلات مكونة من أربع كلمات وتنتج مخرجات مكونة من أربع كلمات:
ب ^= (أ + د) <<< 7؛ ج ^= (ب + أ) <<< 9؛ د ^= (ج + ب) <<< 13؛ أ ^= (د + ج) <<< 18؛
تُطبق الجولات ذات الأرقام الفردية QR(a, b, c, d)على كل من الأعمدة الأربعة في مصفوفة 4×4، وتُطبق الجولات ذات الأرقام الزوجية على كل من الصفوف الأربعة. وتُسمى الجولتان المتتاليتان (جولة العمود وجولة الصف) معًا بالجولة المزدوجة:
// جولة فردية QR( 0, 4, 8, 12) // العمود 1 QR( 5, 9, 13, 1) // العمود 2 QR(10, 14, 2, 6) // العمود 3 QR(15, 3, 7, 11) // العمود 4 // جولة متساوية QR( 0, 1, 2, 3) // الصف 1 QR( 5, 6, 7, 4) // الصف 2 QR(10, 11, 8, 9) // الصف 3 QR(15, 12, 13, 14) // الصف الرابع
يظهر أدناه تنفيذ في C/C++.
#include <stdint.h> #define ROTL(a,b) (((a) << (b)) | ((a) >> (32 - (b)))) #define QR(a, b, c, d)( \ b ^= ROTL(a + d, 7), \ c ^= ROTL(b + a, 9), \ d ^= ROTL(c + b,13), \ a ^= ROTL(d + c,18)) #define ROUNDS 20
void salsa20_block ( uint32_t out [ 16 ]، uint32_t const in [ 16 ]) { int i ؛ uint32_t x [ 16 ]؛
بالنسبة إلى ( i = 0 ؛ i < 16 ؛ ++ i ) x [ i ] = في [ i ]؛ // 10 حلقات × جولتان/حلقة = 20 جولة بالنسبة إلى ( i = 0 ؛ i < جولات ؛ i += 2 ) { // جولة فردية QR ( x [ 0 ]، x [ 4 ]، x [ 8 ]، x [ 12 ])؛ // العمود 1 QR ( x [ 5 ]، x [ 9 ]، x [ 13 ]، x [ 1 ])؛ // العمود 2 QR ( x [ 10 ]، x [ 14 ]، x [ 2 ]، x [ 6 ])؛ // العمود 3 QR ( x [ 15 ]، x [ 3 ]، x [ 7 ]، x [ 11 ])؛ // العمود 4 // تقريب زوجي QR ( x [ 0 ]، x [ 1 ]، x [ 2 ]، x [ 3 ])؛ // الصف 1 QR ( x [ 5 ]، x [ 6 ]، x [ 7 ]، x [ 4 ])؛ // الصف 2 QR ( x [ 10 ]، x [ 11 ]، x [ 8 ]، x [ 9 ])؛ // الصف 3 QR ( x [ 15 ]، x [ 12 ]، x [ 13 ]، x [ 14 ])؛ // الصف 4 } for ( i = 0 ؛
i < 16 ؛ ++ i ) خارج [ i ] = x [ i ] + داخل [ i ]؛ }
في السطر الأخير، تتم إضافة المصفوفة المختلطة، كلمة بكلمة، إلى المصفوفة الأصلية للحصول على كتلة تدفق المفتاح المكونة من 64 بايت. وهذا مهم لأن جولات الخلط في حد ذاتها قابلة للعكس . بعبارة أخرى، سيؤدي تطبيق العمليات العكسية إلى إنتاج مصفوفة 4×4 الأصلية، بما في ذلك المفتاح. إن إضافة المصفوفة المختلطة إلى الأصل يجعل من المستحيل استرداد المدخلات. (تُستخدم نفس التقنية على نطاق واسع في وظائف التجزئة من MD4 إلى SHA-2 .)
يقوم Salsa20 بأداء 20 جولة من المزج على مدخلاته. [1] ومع ذلك، تم أيضًا تقديم متغيرات الجولة المخفضة Salsa20/8 وSalsa20/12 باستخدام 8 و12 جولة على التوالي. تم تقديم هذه المتغيرات لتكملة Salsa20 الأصلي، وليس لاستبداله، وأداء أفضل [ملاحظة 1] في معايير eSTREAM من Salsa20، على الرغم من هامش الأمان الأقل المقابل.
XSalsa20 مع nonce 192 بت
في عام 2008، اقترح بيرنشتاين متغيرًا من Salsa20 بـ 192 بتًا من الأرقام العشوائية يسمى XSalsa20. [7] [8] [9] يمكن إثبات أن XSalsa20 آمن إذا كان Salsa20 آمنًا، ولكنه أكثر ملاءمة للتطبيقات حيث تكون الأرقام العشوائية الأطول مطلوبة. يغذي XSalsa20 المفتاح وأول 128 بتًا من الرقم العشوائي في كتلة واحدة من Salsa20 (بدون الإضافة النهائية، والتي يمكن حذفها أو طرحها بعد كتلة Salsa20 القياسية)، ويستخدم 256 بتًا من الإخراج كمفتاح لـ Salsa20 القياسي باستخدام آخر 64 بتًا من الرقم العشوائي وموضع التدفق. على وجه التحديد، فإن 256 بتًا من الإخراج المستخدمة هي تلك المقابلة للأجزاء غير السرية من الإدخال: الفهارس 0 و5 و10 و15 و6 و7 و8 و9.
مجموعة مختارة من Salsa20 من eSTREAM
تم اختيار Salsa20/12 كتصميم للمرحلة 3 للملف الشخصي 1 (البرمجيات) بواسطة مشروع eSTREAM ، وحصل على أعلى درجة تصويت مرجحة لأي خوارزمية للملف الشخصي 1 في نهاية المرحلة 2. [10] تم اختيار Salsa20 سابقًا كتصميم تركيز للمرحلة 2 للملف الشخصي 1 (البرمجيات) وكتصميم للمرحلة 2 للملف الشخصي 2 (الأجهزة) بواسطة مشروع eSTREAM، [11] ولكن لم يتم تقدمه إلى المرحلة 3 للملف الشخصي 2 لأن eSTREAM شعر أنه ربما لم يكن مرشحًا جيدًا لبيئات الأجهزة ذات الموارد المحدودة للغاية. [12]
توصي لجنة eSTREAM باستخدام Salsa20/12، وهو البديل المكون من 12 جولة، "للجمع بين الأداء الجيد للغاية مع هامش مريح من الأمان." [13]
تحليل شفرة Salsa20
اعتبارًا من عام 2015 [تحديث]، لا توجد هجمات منشورة على Salsa20/12 أو Salsa20/20 الكاملة؛ أفضل هجوم معروف [3] يكسر 8 من الجولات الـ12 أو الـ20.
في عام 2005، أبلغ بول كرولي عن هجوم على Salsa20/5 بتعقيد زمني مقدر بـ 2165 وفاز بجائزة بيرنشتاين بقيمة 1000 دولار أمريكي عن "أكثر تحليل تشفير مثير للاهتمام لـ Salsa20". [14] يعتمد هذا الهجوم وجميع الهجمات اللاحقة على تحليل التشفير التفاضلي المقطوع . في عام 2006، أبلغ فيشر وماير وبيربين وبياس وروبشو عن هجوم على Salsa20/6 بتعقيد زمني مقدر بـ 2177 ، وهجوم مفتاح مرتبط على Salsa20/7 بتعقيد زمني مقدر بـ 2217. [15]
في عام 2007، أعلن Tsunoo وآخرون عن تحليل تشفير Salsa20 والذي يكسر 8 من 20 جولة لاستعادة المفتاح السري المكون من 256 بت في 2255 عملية ، باستخدام زوجين من المفاتيح 11.37 . [16] ومع ذلك، لا يبدو أن هذا الهجوم قادر على المنافسة مع هجوم القوة الغاشمة.
في عام 2008، أبلغ أوماسون وفيشر وكازاي وماير وريتشبرجر عن هجوم تحليلي مشفر ضد Salsa20/7 بتعقيد زمني يبلغ 2 151 ، وأبلغوا عن هجوم ضد Salsa20/8 بتعقيد زمني يقدر بـ 2 251. يستخدم هذا الهجوم المفهوم الجديد لبتات المفتاح المحايدة الاحتمالية للكشف الاحتمالي عن التفاضل المقطوع. يمكن تكييف الهجوم لكسر Salsa20/7 بمفتاح 128 بت. [3]
في عام 2012 ، تم تحسين الهجوم الذي شنه Aumasson وآخرون بواسطة Shi وآخرون ضد Salsa20/7 (مفتاح 128 بت) إلى تعقيد زمني يبلغ 2109 و Salsa20/8 (مفتاح 256 بت) إلى 2250. [ 17]
في عام 2013، نشر Mouha وPreneel دليلاً [18] على أن 15 جولة من Salsa20 كانت آمنة بـ 128 بت ضد التحليل التفاضلي للشفرات . (على وجه التحديد، ليس لها خاصية تفاضلية باحتمالية أعلى من 2 −130 ، لذا فإن التحليل التفاضلي للشفرات سيكون أكثر صعوبة من استنفاد مفتاح 128 بت.)
متغير تشاتشا
وظيفة ربع الدائرة في لعبة ChaCha. حيث يتم نسخ أربع نسخ متوازية لتكوين دائرة. | |
| عام | |
|---|---|
| المصممين | دانييل ج. بيرنشتاين |
| نُشرت لأول مرة | 2008 |
| مشتق من | سالسا 20 |
| ذات صلة ب | رومبا 20 |
| تفاصيل الشفرة | |
| أحجام المفاتيح | 128 أو 256 بت |
| حجم الدولة | 512 بت |
| بناء | أركس |
| جولات | 20 |
| سرعة | 3.95 cpb على Intel Core 2 Duo [4] : 2 |
في عام 2008، نشر بيرنشتاين عائلة تشفير ChaCha ذات الصلة الوثيقة ، والتي تهدف إلى زيادة الانتشار لكل جولة مع تحقيق نفس الأداء أو أداء أفضل قليلاً. [19] كما هاجمت ورقة Aumasson et al. ChaCha، محققة جولة أقل (لـ ChaCha6 بطول 256 بت مع تعقيد 2 139 ، وChaCha7 بتعقيد 2 248 ، وChaCha6 بطول 128 بت في غضون 2 107 ) لكنها تدعي أن الهجوم فشل في كسر ChaCha7 بطول 128 بت. [3]
مثل Salsa20، تتضمن الحالة الأولية لـ ChaCha ثابتًا بطول 128 بتًا، ومفتاحًا بطول 256 بتًا، وعدادًا بطول 64 بتًا، ورقمًا عشوائيًا بطول 64 بتًا (في الإصدار الأصلي؛ كما هو موضح لاحقًا، فإن إصدار ChaCha من RFC 7539 مختلف قليلاً)، مرتبة على شكل مصفوفة 4×4 من الكلمات بطول 32 بتًا. [19] لكن ChaCha يعيد ترتيب بعض الكلمات في الحالة الأولية:
| "إكسبا" | "الثانية 3" | "2 بواسطة" | "تي ك" |
| مفتاح | مفتاح | مفتاح | مفتاح |
| مفتاح | مفتاح | مفتاح | مفتاح |
| عداد | عداد | رقم نونس | رقم نونس |
الثابت هو نفسه Salsa20 ("توسيع 32 بايت k"). يستبدل ChaCha ربع الدائرة Salsa20 QR(a, b, c, d)بما يلي:
أ += ب؛ د ^= أ؛ د <<<= 16؛ ج += د؛ ب ^= ج؛ ب <<<= 12؛ أ += ب؛ د ^= أ؛ د <<<= 8؛ ج += د؛ ب ^= ج؛ ب <<<= 7؛
لاحظ أن هذا الإصدار يقوم بتحديث كل كلمة مرتين، بينما يقوم الربع الدائري لـ Salsa20 بتحديث كل كلمة مرة واحدة فقط. بالإضافة إلى ذلك، يقوم الربع الدائري لـ ChaCha بتشتيت التغييرات بشكل أسرع. في المتوسط، بعد تغيير بت إدخال واحد، سيغير الربع الدائري لـ Salsa20 8 بتات إخراج بينما سيغير ChaCha 12.5 بت إخراج. [4]
تحتوي ربع جولة ChaCha على نفس عدد الإضافات والتكرارات وتدوير البتات مثل ربع جولة Salsa20، ولكن حقيقة أن اثنتين من الدورات هي مضاعفات لـ 8 تسمح بتحسين بسيط لبعض المعماريات بما في ذلك x86. [20] بالإضافة إلى ذلك، تمت إعادة ترتيب تنسيق الإدخال لدعم تحسين تنفيذ SSE الفعال الذي تم اكتشافه لـ Salsa20. بدلاً من التناوب على الجولات لأسفل الأعمدة وعبر الصفوف، يتم إجراؤها لأسفل الأعمدة وعلى طول الأقطار. [4] : 4 مثل Salsa20، يرتب ChaCha الكلمات الستة عشر المكونة من 32 بت في مصفوفة 4 × 4. إذا قمنا بفهرسة عناصر المصفوفة من 0 إلى 15
| 0 | 1 | 2 | 3 |
| 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 |
ثم الجولة المزدوجة في ChaCha هي:
// جولة فردية QR(0, 4, 8, 12) // العمود 1 QR(1, 5, 9, 13) // العمود 2 QR(2, 6, 10, 14) // العمود 3 QR(3, 7, 11, 15) // العمود 4 // جولة متساوية QR(0, 5, 10, 15) // قطري 1 (قطري رئيسي) QR(1, 6, 11, 12) // قطري 2 QR(2, 7, 8, 13) // قطري 3 QR(3, 4, 9, 14) // قطري 4
يستخدم ChaCha20 10 تكرارات للجولة المزدوجة. [21] يظهر تنفيذ في C/C++ أدناه.
#define ROTL(a,b) (((a) << (b)) | ((a) >> (32 - (b))))
#define QR(a, b, c, d) ( \
a += b, d ^= a, d = ROTL(d, 16), \
c += d, b ^= c, b = ROTL(b, 12), \
a += b, d ^= a, d = ROTL(d, 8), \
c += d, b ^= c, b = ROTL(b, 7))
#define ROUNDS 20
void chacha_block ( uint32_t out [ 16 ]، uint32_t const in [ 16 ]) { int i ؛ uint32_t x [ 16 ]؛
بالنسبة إلى ( i = 0 ؛ i < 16 ؛ ++ i ) x [ i ] = في [ i ]؛ // 10 حلقات × جولتان/حلقة = 20 جولة بالنسبة إلى ( i = 0 ؛ i < جولات ؛ i += 2 ) { // جولة فردية QR ( x [ 0 ]، x [ 4 ]، x [ 8 ]، x [ 12 ])؛ // العمود 1 QR ( x [ 1 ]، x [ 5 ]، x [ 9 ]، x [ 13 ])؛ // العمود 2 QR ( x [ 2 ]، x [ 6 ]، x [ 10 ]، x [ 14 ])؛ // العمود 3 QR ( x [ 3 ]، x [ 7 ]، x [ 11 ]، x [ 15 ])؛ // العمود 4 // دائري زوجي QR ( x [ 0 ], x [ 5 ], x [ 10 ], x [ 15 ]); // قطري 1 (قطري رئيسي) QR ( x [ 1 ], x [ 6 ], x [ 11 ], x [ 12 ]); // قطري 2 QR ( x [ 2 ], x [ 7 ], x [ 8 ], x [ 13 ]); // قطري 3 QR ( x [ 3 ], x [ 4 ], x [ 9 ], x [ 14 ]); // قطري 4 } لـ ( i =
0 ؛ i < 16 ؛ ++ i ) خارج [ i ] = x [ i ] + داخل [ i ]؛ }
ChaCha هو أساس دالة التجزئة BLAKE ، وهي إحدى المتأهلات للنهائيات في مسابقة دالة التجزئة NIST ، وخلفائها الأسرع BLAKE2 وBLAKE3. كما أنها تحدد متغيرًا باستخدام ستة عشر كلمة مكونة من 64 بت (1024 بت من الحالة)، مع ثوابت دوران معدلة وفقًا لذلك.
إكستشاتشا
على الرغم من عدم إعلان بيرنشتاين عن ذلك، فإن دليل الأمان الخاص بـ XSalsa20 يمتد بشكل مباشر إلى تشفير XChaCha التناظري . استخدم المفتاح وأول 128 بت من nonce (في كلمات الإدخال من 12 إلى 15) لتشكيل كتلة إدخال ChaCha، ثم قم بإجراء عملية الكتلة (مع حذف الإضافة النهائية). ثم تشكل كلمات الإخراج 0-3 و12-15 (تلك الكلمات المقابلة للكلمات غير الأساسية للمدخلات) المفتاح المستخدم لـ ChaCha العادي (مع آخر 64 بت من nonce و64 بت من block counter). [22]
تشاتشا ذات الجولة المخفضة
يزعم أوماسون في عام 2020 أن 8 جولات من ChaCha (ChaCha8) ربما توفر مقاومة كافية لتحليل التشفير في المستقبل لنفس مستوى الأمان ، مما يؤدي إلى تسريع 2.5 ×. [23] كما يستخدم أيضًا حل وسط ChaCha12 (بناءً على توصية eSTREAM بـ 12 جولة Salsa) [24] . [25] تتضمن مجموعة أدوات قياس الأداء eSTREAM ChaCha8 وChaCha12. [19]
اعتماد ChaCha20
اختارت جوجل ChaCha20 مع رمز مصادقة رسالة Poly1305 الخاص ببرنشتاين في SPDY ، والذي كان من المقصود أن يكون بديلاً لـ TLS عبر TCP . [26] وفي هذه العملية، اقترحوا بنية تشفير جديدة مصدقة تجمع بين الخوارزميتين، والتي تسمى ChaCha20-Poly1305 . يتم الآن استخدام ChaCha20 وPoly1305 في بروتوكول QUIC ، الذي يحل محل SPDY ويستخدمه HTTP/3 . [27] [28]
بعد فترة وجيزة من اعتماد Google لـ TLS، تم أيضًا استخدام كل من خوارزميتي ChaCha20 وPoly1305 لإنشاء chacha20-poly1305@openssh.comتشفير جديد في OpenSSH . [29] [30] وبالتالي، أتاح هذا لـ OpenSSH تجنب أي اعتماد على OpenSSL ، عبر خيار وقت التجميع. [31]
يستخدم ChaCha20 أيضًا لمولد arc4randomالأرقام العشوائية في أنظمة التشغيل FreeBSD ، [32] و OpenBSD ، [33] و NetBSD [34] ، بدلاً من RC4 المكسور ، وفي DragonFly BSD [35] للروتين الفرعي CSPRNG للنواة. [36] [37] بدءًا من الإصدار 4.8، تستخدم نواة Linux خوارزمية ChaCha20 لتوليد البيانات لجهاز /dev/urandom غير الحظر . [38] [39] [40] يستخدم ChaCha8 لمولد الأرقام العشوائية الافتراضي في Golang . [41] يستخدم CSPRNG في Rust ChaCha12. [24]
عادةً ما تقدم ChaCha20 أداءً أفضل من خوارزمية Advanced Encryption Standard (AES) الأكثر انتشارًا في الأنظمة التي لا تحتوي وحدة المعالجة المركزية فيها على تسريع AES (مثل مجموعة تعليمات AES لمعالجات x86). ونتيجة لذلك، يُفضل ChaCha20 أحيانًا على AES في حالات استخدام معينة تتضمن الأجهزة المحمولة ، والتي تستخدم في الغالب وحدات المعالجة المركزية المستندة إلى ARM . [42] [43] كما أن مسرعات الأجهزة المتخصصة لـ ChaCha20 أقل تعقيدًا مقارنة بمسرعات AES. [44]
ChaCha20-Poly1305 (إصدار IETF؛ انظر أدناه) هي الخوارزمية الحصرية المستخدمة بواسطة نظام WireGuard VPN، اعتبارًا من إصدار البروتوكول 1. [45]
معايير الانترنت
تم نشر مرجع تنفيذ لـ ChaCha20 في RFC 7539. قام تنفيذ IETF بتعديل خوارزمية بيرنشتاين المنشورة عن طريق تغيير nonce 64 بت وعداد الكتلة 64 بت إلى nonce 96 بت وعداد كتلة 32 بت. [46] لم يتم تغيير الاسم عند تعديل الخوارزمية، لأنه غير مهم تشفيريًا (كلاهما يشكل ما قد يتعرف عليه عالم التشفير على أنه nonce 128 بت)، ولكن تغيير الواجهة يمكن أن يكون مصدر ارتباك للمطورين. نظرًا لعداد الكتلة المخفض، فإن الحد الأقصى لطول الرسالة التي يمكن تشفيرها بأمان بواسطة متغير IETF هو 2 32 كتلة من 64 بايت (256 جيجابايت ). بالنسبة للتطبيقات حيث لا يكون هذا كافيًا، مثل تشفير الملفات أو الأقراص، يقترح RFC 7539 استخدام الخوارزمية الأصلية مع nonce 64 بت.
| "إكسبا" | "الثانية 3" | "2 بواسطة" | "تي ك" |
| مفتاح | مفتاح | مفتاح | مفتاح |
| مفتاح | مفتاح | مفتاح | مفتاح |
| عداد | رقم نونس | رقم نونس | رقم نونس |
تم توحيد استخدام ChaCha20 في IKE و IPsec في RFC 7634. وتم نشر توحيد استخدامه في TLS في RFC 7905.
في عام 2018، أصبح RFC 7539 قديمًا بسبب RFC 8439. يدمج RFC 8439 بعض الأخطاء ويضيف اعتبارات أمنية إضافية. [47]
انظر أيضا
- Speck – تشفير الإضافة والتدوير والتكرار الذي طورته وكالة الأمن القومي الأمريكية
- ChaCha20-Poly1305 – مخطط AEAD يجمع بين ChaCha20 وPoly1305 MAC
ملحوظات
- ^ نظرًا لأن الجزء الأكبر من العمل يتكون من أداء الجولات المتكررة، فإن عدد الجولات يتناسب عكسيًا مع الأداء. أي أن تقليص عدد الجولات إلى النصف يضاعف الأداء تقريبًا. وبالتالي فإن المتغيرات ذات الجولات المخفضة تكون أسرع بشكل ملحوظ.
مراجع
- ^ من تأليف Daniel J. Bernstein (2007-12-24). "عائلة Salsa20 من شفرات التدفق" (PDF) . cr.yp.to .
- ^ Daniel J. Bernstein (2013-05-16). "Salsa 20 speed؛ برنامج Salsa20".
- ^ أ ب ج د جان فيليب أوماسون؛ سيمون فيشر؛ شهرام خزاعي؛ ويلي ماير؛ كريستيان ريشبرجر (2008-03-14). "السمات الجديدة للرقصات اللاتينية" (PDF) . الرابطة الدولية لأبحاث التشفير .
- ^ abcd Bernstein, Daniel (28 January 2008), ChaCha, a variant of Salsa20 (PDF) , تم الاسترجاع في 2018-06-03
- ^ Daniel J. Bernstein (2013-05-16). "Snuffle 2005: وظيفة تشفير Salsa20".
- ^ "Salsa20: سرعة البرمجيات". 2007-05-11.
- ^ Daniel J. Bernstein. "Extending the Salsa20 nonce (updated in 2011)" (PDF) . cr.yp.to . تم الاسترجاع في 2022-08-18 .
- ^ Daniel J. Bernstein. "Extending the Salsa20 nonce (original version)" (PDF) . cr.yp.to . تم الاسترجاع في 2022-08-18 .
- ^ "Salsa20/12". ECRYPT II . تم الاسترجاع في 2017-08-22 .
- ^ "مشروع eSTREAM: نهاية المرحلة الثانية". eSTREAM . 2008-04-29.
- ^ هونغ جون وو (2007-03-30). "المرحلة الثالثة من eSTREAM: نهاية المرحلة الأولى". eSTREAM.
- ^ "eSTREAM: تقرير قصير عن نهاية المرحلة الثانية" (PDF) . eSTREAM. 2007-03-26.
- ^ "Salsa20/12، صفحة محفظة eSTREAM". www.ecrypt.eu.org .
- ^ بول كرولي (2006-02-09). "تحليل تشفير تفاضلي مقطوع لخمس جولات من Salsa20".
- ^ سيمون فيشر؛ ويلي ماير؛ كوم بيربان؛ جان فرانسوا بياسي؛ إم جيه بي روبشو (2006). "عدم العشوائية في مرشحي eSTREAM Salsa20 وTSC-4". التقدم في التشفير - INDOCRYPT 2006: المؤتمر الدولي السابع حول التشفير في الهند، كولكاتا، الهند، 11-13 ديسمبر 2006، الإجراءات . ملاحظات المحاضرات في علوم الكمبيوتر. المجلد 4329. ص 2-16. CiteSeerX 10.1.1.121.7248 . doi :10.1007/11941378_2. ISBN 978-3-540-49767-7.
- ^ يوكياسو تسونو؛ تيرو سايتو؛ هيروياسو كوبو؛ توموياسو سوزاكي؛ هيروكي ناكاشيما (2007-01-02). “تحليل الشفرات التفاضلي لـ Salsa20/8” (PDF) . تشفير .
- ^ Zhenqing Shi؛ Bin Zhang؛ Dengguo Feng؛ Wenling Wu (2012). "Improved Key Recovery Attacks on Reduced-Round Salsa20 and ChaCha". Information Security and Cryptology – ICISC 2012. Lecture Notes in Computer Science. المجلد 7839. ص 337–351. doi :10.1007/978-3-642-37682-5_24. ISBN 978-3-642-37681-8.
- ^ نيكي موها؛ بارت برينيل (2013). "نحو إيجاد خصائص تفاضلية مثالية لـ ARX: تطبيق على Salsa20" (PDF) . الرابطة الدولية لأبحاث التشفير .
- ^ abc Daniel J. Bernstein (2008-04-25). "عائلة ChaCha من شفرات التدفق".
- ^ Neves, Samuel (2009-10-07), Faster ChaCha implementations for Intel processings, archived from the original on 2017-03-28 , restored 2016-09-07 ,
اثنان من هذه الثوابت هي مضاعفات لـ 8؛ هذا يسمح بتناوب تعليمة واحدة في Core2 ووحدات المعالجة المركزية Intel الأحدث باستخدام
تعليمة
pshufb
- ^ Y. Nir; A. Langley (مايو 2015). "ChaCha20 وPoly1305 لبروتوكولات IETF: RFC 7539".
- ^ Arciszewski, Scott (10 يناير 2020). "XChaCha: eXtended-nonce ChaCha وAEAD_XChaCha20_Poly1305 (مسودة إنترنت منتهية الصلاحية)". Ietf Datatracker .
- ^ Aumasson, Jean-Philippe (2020). Too Much Crypto (PDF) . ندوة العملات المشفرة في العالم الحقيقي.
- ^ ab "rand_chacha: النظر في ChaCha12 (أو ربما ChaCha8) على ChaCha20 · العدد #932 · rust-random/rand". GitHub .
- ^ "ChaCha". أساسيات التشفير .
- ^ "افعل تشاتشا: أداء أفضل للجوال باستخدام التشفير". مدونة Cloudflare . 2015-02-23 . تم الاسترجاع في 2021-07-13 .
- ^ تومسون، مارتن؛ تورنر، شون (مايو 2021). "RFC 9001". datatracker.ietf.org . تم الاسترجاع في 2021-07-13 .
- ^ بيشوب، مايك (2 فبراير 2021). "مسودة: IETF QUIC HTTP". datatracker.ietf.org . تم الاسترجاع في 2021-07-13 .
- ^ ميلر، داميان (2016-05-03). "ssh/PROTOCOL.chacha20poly1305". مرجع BSD الخاص بالمستخدم الفائق: PROTOCOL.chacha20poly1305 . تم الاسترجاع في 2016-09-07 .
- ^ Murenin, Constantine A. (2013-12-11). Unknown Lamer (ed.). "OpenSSH Has a New Cipher — Chacha20-poly1305 — from DJ Bernstein". Slashdot . تم الاسترجاع في 2016-09-07 .
- ^ Murenin, Constantine A. (2014-04-30). Soulskill (محرر). "OpenSSH لم يعد يعتمد على OpenSSL". Slashdot . تم الاسترجاع في 2016-09-07 .
- ^ "المراجعة 317015". 2017-04-16 . تم الاسترجاع 2018-03-16 .
استبدال خوارزمية RC4 لتوليد أرقام عشوائية آمنة داخل النواة بـ Chacha20
- ^ guenther (Philip Guenther)، محرر (2015-09-13). "libc/crypt/arc4random.c". مرجع Super User's BSD Cross Reference: arc4random.c . تم الاسترجاع في 2016-09-07 .
مولد أرقام عشوائية قائم على ChaCha لنظام OpenBSD.
- ^ riastradh (Taylor Campbell)، محرر (2016-03-25). "libc/gen/arc4random.c". مرجع Super User's BSD Cross Reference: arc4random.c . تم الاسترجاع في 2016-09-07 .
واجهة برمجة تطبيقات arc4random(3) القديمة من OpenBSD تم إعادة تنفيذها باستخدام ChaCha20 PRF، مع حالة لكل خيط.
- ^ "kern/subr_csprng.c". مرجع BSD الخاص بمستخدمي Super User: subr_csprng.c . 2015-11-04 . تم الاسترجاع في 2016-09-07 .
chacha_encrypt_bytes - ^ "ChaCha Usage & Deployment". 2016-09-07 . تم الاسترجاع في 2016-09-07 .
- ^ "arc4random(3)". صفحات دليل NetBSD . 2014-11-16. مؤرشف من الأصل في 2020-07-06 . تم الاسترجاع في 2016-09-07 .
- ^ كوربيت، جوناثان. "استبدال /dev/urandom". أخبار لينكس الأسبوعية . تم الاسترجاع في 2016-09-20 .
- ^ "دمج العلامة 'random_for_linus' من git.kernel.org/pub/scm/linux/kernel/git/tytso/random". شجرة مصدر نواة Linux . تم الاسترجاع في 2016-09-20 .
random: استبدال مجموعة غير مانعة بـ CRNG تعتمد على Chacha20
- ^ مايكل لارابيل (2016-07-25). "/dev/random رؤية تحسينات لنظام Linux 4.8". Phoronix . تم الاسترجاع في 2016-10-03 .
- ^ كوكس، روس؛ فالسوردا، فيليبو. "العشوائية الآمنة في Go 1.22 - لغة برمجة Go". go.dev .
- ^ "ما هي جاذبية استخدام ChaCha20 بدلاً من AES؟". Cryptography Stack Exchange . 2016-04-12.
- ^ "دراسة أداء AES-NI SSL @ Calomel.org".
- ^ Pfau, Johannes; Reuter, Maximilian; Harbaum, Tanja; Hofmann, Klaus; Becker, Jurgen (سبتمبر 2019). "منظور الأجهزة لشفرات ChaCha: تطبيقات Chacha8/12/20 القابلة للتطوير تتراوح من 476 شريحة إلى معدلات بتات 175 جيجابت/ثانية". مؤتمر IEEE الدولي الثاني والثلاثون لعام 2019. ص 294-299. doi :10.1109/SOCC46988.2019.1570548289. ISBN 978-1-7281-3483-3.
- ^ "البروتوكول والتشفير". WireGuard . Jason A. Donenfeld . تم الاسترجاع في 4 يوليو 2018 .
- ^ ab "ChaCha20 وPoly1305 لبروتوكولات IETF" (PDF) . تم الاسترجاع في 2017-08-07 .
تغييرات من ChaCha العادي. تم تغيير تقسيم رقم تسلسل الكتلة nonce: من 64:64 إلى 96:32 [...] يتم تهيئة حالة ChaCha20 على النحو التالي:
- ^ رأس RFC 7539.
روابط خارجية
- Snuffle 2005: وظيفة تشفير Salsa20
- مواصفات Salsa20 ( PDF )
- Salsa20/8 وSalsa20/12 (PDF)
- مشروع eSTREAM: Salsa20
- عائلة ChaCha من شفرات التدفق
- استخدام ونشر Salsa20
- تنفيذ وتصور تعليمي لعائلة تشفير ChaCha في CrypTool 2
