سالسا 20

تُعدّ خوارزمية Salsa20 (المعروفة سابقًا باسم Snuffle 2005 [ 4 ] ) وخوارزمية ChaCha، المرتبطة بها ارتباطًا وثيقًا، من خوارزميات التشفير المتدفقة التي طوّرها دانيال ج. بيرنشتاين . صُممت خوارزمية Salsa20 الأصلية عام 2005، ثم قدّمها بيرنشتاين لاحقًا إلى عملية التحقق من التشفير eSTREAM التابعة للاتحاد الأوروبي. أما خوارزمية ChaCha فهي نسخة مُعدّلة من Salsa20 نُشرت عام 2008. وتستخدم دالة جولة جديدة تُحسّن الانتشار وتزيد الأداء على بعض البنى. [ 5 ]

تعتمد كلتا الخوارزميتين على دالة شبه عشوائية مبنية على عمليات الجمع والتدوير والجمع الثنائي (ARX) - وهي عمليات جمع 32 بت، وجمع ثنائي (XOR)، وتدوير . تقوم الدالة الأساسية بربط مفتاح 256 بت ، وقيمة عشوائية 64 بت ، وعداد 64 بت بكتلة 512 بت من سلسلة المفاتيح (توجد أيضًا نسخة من Salsa بمفتاح 128 بت). يمنح هذا Salsa20 وChaCha ميزة فريدة تتمثل في قدرة المستخدم على الوصول بكفاءة إلى أي موضع في سلسلة المفاتيح في وقت ثابت. توفر Salsa20 سرعات تتراوح بين 4 و14 دورة لكل بايت في البرمجيات على معالجات x86 الحديثة، [ 6 ] وأداءً معقولاً على مستوى الأجهزة. وهي غير مسجلة ببراءة اختراع، وقد كتب بيرنشتاين العديد من التطبيقات المتاحة للعموم والمحسّنة للبنى الشائعة. [ 7 ]

بناء

يستخدم التشفير داخليًا عملية الجمع الثنائي ⊕ ( أو الحصرية )، والجمع الثنائي 32 بتردد 2، وعمليات التدوير ذات المسافة الثابتة <<< على حالة داخلية مكونة من ستة عشر كلمة من 32 بت. يُجنّب استخدام عمليات الجمع والتدوير والأو الحصرية فقط إمكانية استغلال هجمات التوقيت في التطبيقات البرمجية. تتكون الحالة الداخلية من ستة عشر كلمة من 32 بت مرتبة على شكل مصفوفة 4×4.

0123
4567
891011
12131415

تتكون الحالة الأولية من ثماني كلمات مفتاح (  )، وكلمتين لموضع التدفق ( )، وكلمتين من nonce (وهي في الأساس بتات إضافية لموضع التدفق) ( )، وأربع كلمات ثابتة ( ):   

الحالة الأولية لبرنامج سالسا 20
"إكسبا"مفتاحمفتاحمفتاح
مفتاح"nd 3"نونسينونسي
الوضع.الوضع."2-by"مفتاح
مفتاحمفتاحمفتاح"te k"

تُشكّل الكلمات الثابتة عبارة "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) // الصف 4

يظهر أدناه تطبيق مكتوب بلغة 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 20void salsa20_block ( uint32_t out [ 16 ], uint32_t const in [ 16 ]) { int i ; uint32_t x [ 16 ];for ( i = 0 ; i < 16 ; ++ i ) x [ i ] = in [ i ]; // 10 حلقات × 2 جولة/حلقة = 20 جولة for ( i = 0 ; i < ROUNDS ; 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 ) out [ i ] = x [ i ] + in [ i ]; }

في السطر الأخير، تُضاف المصفوفة المختلطة، كلمةً كلمة، إلى المصفوفة الأصلية للحصول على كتلة دفق المفتاح بحجم 64 بايت. هذا مهم لأن جولات المزج قابلة للعكس . بعبارة أخرى، تطبيق العمليات العكسية سيُنتج المصفوفة الأصلية 4×4، بما في ذلك المفتاح. إضافة المصفوفة المختلطة إلى المصفوفة الأصلية يجعل استعادة المدخلات مستحيلة. (تُستخدم هذه التقنية نفسها على نطاق واسع في دوال التجزئة من MD4 إلى SHA-2 ).

تُجري خوارزمية Salsa20 عشرين جولة من المزج على مدخلاتها. [ 1 ] ومع ذلك، فقد طُرحت أيضًا نسختان مُخفّضتان من الخوارزمية، وهما Salsa20/8 وSalsa20/12، باستخدام ثماني واثنتي عشرة جولة على التوالي. وقد طُرحت هاتان النسختان لتكملة خوارزمية Salsa20 الأصلية، لا لاستبدالها، وهما تُحققان أداءً أفضل [ ملاحظة 1 ] في معايير eSTREAM مقارنةً بخوارزمية Salsa20، على الرغم من انخفاض هامش الأمان لديهما.

XSalsa20 مع قيمة عشوائية 192 بت

في عام 2008، اقترح بيرنشتاين نسخة معدلة من خوارزمية سالسا20 باستخدام قيم عشوائية (nonce) بطول 192 بت، أطلق عليها اسم XSalsa20. [ 8 ] [ 9 ] [ 10 ] تُعتبر XSalsa20 آمنة بشكل مؤكد إذا كانت سالسا20 آمنة، ولكنها أكثر ملاءمة للتطبيقات التي تتطلب قيمًا عشوائية أطول. تُدخل XSalsa20 المفتاح وأول 128 بت من القيمة العشوائية في كتلة واحدة من سالسا20 (بدون عملية الجمع الأخيرة، التي يمكن حذفها أو طرحها بعد كتلة سالسا20 القياسية)، وتستخدم 256 بت من الناتج كمفتاح لخوارزمية سالسا20 القياسية باستخدام آخر 64 بت من القيمة العشوائية وموضع التدفق. تحديدًا، فإن الـ 256 بت المستخدمة من الناتج هي تلك التي تُقابل الأجزاء غير السرية من المدخلات: الفهارس 0، 5، 10، 15، 6، 7، 8، و9.

مجموعة مختارة من أغاني سالسا 20 عبر البث الإلكتروني

تم اختيار خوارزمية Salsa20/12 كتصميم للمرحلة الثالثة من الملف التعريفي الأول (البرمجيات) ضمن مشروع eSTREAM ، بعد حصولها على أعلى درجة تصويت مرجحة بين جميع خوارزميات الملف التعريفي الأول في نهاية المرحلة الثانية. [ 11 ] وكانت خوارزمية Salsa20 قد اختيرت سابقًا كتصميم محوري للمرحلة الثانية من الملف التعريفي الأول (البرمجيات) وكتصميم للمرحلة الثانية من الملف التعريفي الثاني (الأجهزة) ضمن مشروع eSTREAM، [ 12 ] ولكن لم يتم اعتمادها للمرحلة الثالثة من الملف التعريفي الثاني لأن مشروع eSTREAM رأى أنها قد لا تكون مناسبة لبيئات الأجهزة ذات الموارد المحدودة للغاية. [ 13 ]

توصي لجنة eSTREAM باستخدام Salsa20/12، وهو الإصدار المكون من 12 جولة، من أجل "الجمع بين الأداء الجيد للغاية وهامش أمان مريح". [ 14 ]

تحليل شفرة سالسا 20

اعتبارًا من عام 2015، لا توجد هجمات منشورة على Salsa20/12 أو Salsa20/20 الكاملة؛ أفضل هجوم معروف [ 3 ] يكسر 8 من أصل 12 أو 20 جولة.

في عام 2005، أبلغ بول كراولي عن هجوم على خوارزمية سالسا20/5 بتعقيد زمني مُقدّر بـ 2^ 165 ، وفاز بجائزة بيرنشتاين البالغة 1000 دولار أمريكي لأكثر تحليل تشفيري مثير للاهتمام لخوارزمية سالسا20. [ 15 ] يعتمد هذا الهجوم وجميع الهجمات اللاحقة على التحليل التفاضلي المُقتطع للتشفير . في عام 2006، أبلغ كل من فيشر، وماير، وبيربين، وبياسي، وروبشو عن هجوم على خوارزمية سالسا20/6 بتعقيد زمني مُقدّر بـ 2^ 177 ، وهجوم آخر باستخدام مفتاح مُرتبط على خوارزمية سالسا20/7 بتعقيد زمني مُقدّر بـ 2^ 217 . [ 16 ]

في عام 2007، أعلن تسونو وآخرون عن تحليل تشفيري لخوارزمية سالسا20، حيث تمكنوا من كسر 8 من أصل 20 جولة لاستعادة المفتاح السري ذي 256 بت في 2^ 255 عملية، باستخدام 2^ 11.37 زوجًا من سلاسل المفاتيح. [ 17 ] ومع ذلك، لا يبدو أن هذا الهجوم يُضاهي هجوم القوة الغاشمة.

في عام 2008، أبلغ أوماسون، وفيشر، وخازائي، وماير، وريشبيرغر عن هجوم تحليلي تشفيري ضد خوارزمية سالسا20/7 بتعقيد زمني قدره 2^ 151 ، كما أبلغوا عن هجوم ضد خوارزمية سالسا20/8 بتعقيد زمني مُقدَّر قدره 2^ 251 . يستغل هذا الهجوم المفهوم الجديد لبتات المفتاح المحايد الاحتمالية للكشف الاحتمالي عن تفاضل مُقتطع. ويمكن تكييف الهجوم لكسر خوارزمية سالسا20/7 باستخدام مفتاح طوله 128 بت. [ 3 ]

في عام 2012، تم تحسين الهجوم الذي قام به أوماسون وآخرون بواسطة شي وآخرون ضد Salsa20/7 (مفتاح 128 بت) إلى تعقيد زمني قدره 2109 و Salsa20/8 (مفتاح 256 بت) إلى 2250. [ 18 ]

في عام 2013، نشر موها وبرينيل برهانًا [ 19 ] على أن 15 جولة من خوارزمية سالسا20 آمنة على مستوى 128 بت ضد التحليل التفاضلي للتشفير . (على وجه التحديد، ليس لها خاصية تفاضلية باحتمالية أعلى من 2 ^130 ، لذا فإن التحليل التفاضلي للتشفير سيكون أكثر صعوبة من استنفاد مفتاح 128 بت).

في عام 2025، أبلغ دي وآخرون عن هجوم تحليلي للشفرات ضد Salsa20/8 بتعقيد زمني قدره 2245.84 وبيانات بلغت 299.47 . [ 20 ]

نوع تشا تشا

في عام 2008، نشر بيرنشتاين عائلة تشفيرات تشاتشا ، وهي عائلة وثيقة الصلة ، تهدف إلى زيادة معدل الانتشار لكل جولة مع تحقيق أداء مماثل أو أفضل قليلاً. [ 21 ] كما هاجمت ورقة أوماسون وآخرون خوارزمية تشاتشا، محققةً جولة واحدة أقل (لتشفير تشاتشا6 ذي 256 بت بتعقيد 2^ 139 ، وتشاتشا7 بتعقيد 2^ 248 ، وتشاتشا6 ذي 128 بت ضمن 2^ 107 )، لكنها تدّعي أن الهجوم فشل في اختراق تشاتشا7 ذي 128 بت. [ 3 ]

على غرار خوارزمية سالسا 20، تتضمن الحالة الأولية لخوارزمية تشاتشا ثابتًا بطول 128 بت، ومفتاحًا بطول 256 بت، وعدادًا بطول 64 بت، وقيمة عشوائية (nonce) بطول 64 بت (في النسخة الأصلية؛ وكما هو موضح لاحقًا، فإن نسخة من خوارزمية تشاتشا من RFC 7539 تختلف قليلًا)، مرتبة على شكل مصفوفة 4×4 من كلمات بطول 32 بت. [ 21 ] لكن خوارزمية تشاتشا تعيد ترتيب بعض الكلمات في الحالة الأولية: 

الحالة الأولية لـ ChaCha
"إكسبا""nd 3""2-by""te k"
مفتاحمفتاحمفتاحمفتاح
مفتاحمفتاحمفتاحمفتاح
عدادعدادنونسينونسي

الثابت هو نفسه في Salsa20 ("توسيع k بحجم 32 بايت"). يستبدل ChaCha ربع الجولة في Salsa20 QR(a, b, c, d)بما يلي:

a += b; d ^= a; d <<<= 16; c += d; b ^= c; b <<<= 12; a += b; d ^= a; d <<<= 8; ج += د؛ ب ^= ج؛ ب <<<= 7؛

لاحظ أن هذا الإصدار يُحدّث كل كلمة مرتين، بينما يُحدّث ربع دورة Salsa20 كل كلمة مرة واحدة فقط. إضافةً إلى ذلك، يُوزّع ربع دورة ChaCha التغييرات بسرعة أكبر. في المتوسط، بعد تغيير بت واحد في المدخلات، يُغيّر ربع دورة Salsa20 ثمانية بتات في المخرجات، بينما يُغيّر ChaCha اثني عشر بتًا ونصف في المخرجات. [ 5 ]

تحتوي عملية ربع الجولة في خوارزمية ChaCha على نفس عدد عمليات الجمع، وعمليات XOR، وتدوير البتات الموجودة في عملية ربع الجولة في خوارزمية Salsa20، ولكن حقيقة أن اثنين من عمليات التدوير هما من مضاعفات العدد 8 تسمح بتحسين طفيف على بعض البنى، بما في ذلك x86. [ 22 ] بالإضافة إلى ذلك، أُعيد ترتيب تنسيق الإدخال لدعم تحسين تنفيذ SSE الفعال الذي تم اكتشافه لخوارزمية Salsa20. فبدلاً من التناوب بين الجولات لأسفل الأعمدة وعبر الصفوف، يتم تنفيذها لأسفل الأعمدة وعلى طول الأقطار. [ 5 ] : 4 ومثل خوارزمية Salsa20، ترتب خوارزمية ChaCha الكلمات الست عشرة ذات 32 بت في مصفوفة 4×4. إذا قمنا بفهرسة عناصر المصفوفة من 0 إلى 15

0123
4567
891011
12131415

ثم الجولة المزدوجة في رقصة تشا تشا هي:

// عدد فردي 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 عشر دورات من الجولة المزدوجة. [ 23 ] يظهر أدناه تطبيقها بلغة C/C++.

#include <stdint.h> #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 20void chacha_block ( uint32_t out [ 16 ], uint32_t const in [ 16 ]) { int i ; uint32_t x [ 16 ];for ( i = 0 ; i < 16 ; ++ i ) x [ i ] = in [ i ]; // 10 حلقات × 2 جولة/حلقة = 20 جولة for ( i = 0 ; i < ROUNDS ; 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 } for ( i =0 ; i < 16 ; ++ i ) out [ i ] = x [ i ] + in [ i ]; }

تُعدّ ChaCha أساس دالة التجزئة BLAKE ، التي وصلت إلى المرحلة النهائية في مسابقة NIST لدوال التجزئة ، بالإضافة إلى دوال التجزئة الأسرع BLAKE2 وBLAKE3. كما تُعرّف ChaCha نسخةً مُعدّلةً باستخدام ستة عشر كلمةً من 64 بت (1024 بت من الحالة)، مع ثوابت دوران مُعدّلة تبعًا لذلك.

إكس تشا تشا

على الرغم من عدم إعلان بيرنشتاين عن ذلك، فإن برهان أمان XSalsa20 يمتد بسهولة إلى تشفير XChaCha مماثل . استخدم المفتاح وأول 128 بت من قيمة nonce (في كلمات الإدخال من 12 إلى 15) لتكوين كتلة إدخال ChaCha، ثم نفّذ عملية الكتلة (مع حذف عملية الجمع الأخيرة). تُشكّل كلمات الإخراج من 0 إلى 3 ومن 12 إلى 15 (الكلمات التي لا تُمثّل كلمات مفتاحية في الإدخال) المفتاح المستخدم في تشفير ChaCha العادي (مع آخر 64 بت من قيمة nonce و64 بت من عداد الكتلة). [ 24 ]

تشا تشا مستديرة مصغرة

يجادل أوماسون في عام 2020 بأن ثماني جولات من خوارزمية تشا تشا (ChaCha8) توفر على الأرجح مقاومة كافية لتحليل التشفير المستقبلي لنفس مستوى الأمان ، مما يؤدي إلى تسريع العملية بمقدار 2.5 ضعف. [ 25 ] كما تُستخدم خوارزمية تشا تشا 12 (المستندة إلى توصية eSTREAM باستخدام 12 جولة من خوارزمية سالسا) [ 26 ] على نطاق واسع. [ 27 ] تتضمن مجموعة اختبارات eSTREAM المعيارية خوارزميتي تشا تشا 8 وتشا تشا 12. [ 21 ]

تبني تشاتشا20

اختارت جوجل خوارزمية ChaCha20 مع رمز مصادقة الرسائل Poly1305 الخاص ببيرنشتاين في بروتوكول SPDY ، الذي كان يهدف إلى استبدال بروتوكول TLS عبر TCP . [ 28 ] وفي هذا السياق، اقترحت جوجل بنية تشفير جديدة مُصادق عليها تجمع بين الخوارزميتين، تُسمى ChaCha20-Poly1305 . تُستخدم خوارزميتا ChaCha20 وPoly1305 حاليًا في بروتوكول QUIC ، الذي يحل محل SPDY ويُستخدم في HTTP/3 . [ 29 ] [ 30 ]

بعد فترة وجيزة من اعتماد جوجل لبروتوكول TLS، استُخدمت خوارزميتا ChaCha20 وPoly1305 أيضًا في chacha20-poly1305@openssh.comتشفير جديد ضمن OpenSSH . [ 31 ] [ 32 ] وبالتالي، مكّن هذا OpenSSH من الاستغناء عن OpenSSL ، عبر خيار وقت الترجمة. [ 33 ]

يُستخدم ChaCha20 أيضًا كمولد arc4randomللأرقام العشوائية في أنظمة التشغيل FreeBSD [ 34 ] و OpenBSD [ 35 ] و NetBSD [ 36 ] ، بدلاً من RC4 المعيب ، وفي DragonFly BSD [ 37 ] لروتين CSPRNG الفرعي في النواة. [ 38 ] [ 39 ] بدءًا من الإصدار 4.8، تستخدم نواة Linux خوارزمية ChaCha20 لتوليد البيانات لجهاز /dev/urandom غير المحظور . [ 40 ] [ 41 ] [ 42 ] يُستخدم ChaCha8 كمولد الأرقام العشوائية الافتراضي في Golang . [ 43 ] يستخدم CSPRNG في Rust خوارزمية ChaCha12. [ 26 ]

عادةً ما يُقدّم بروتوكول ChaCha20 أداءً أفضل من خوارزمية التشفير المتقدمة (AES) الأكثر شيوعًا على الأنظمة التي لا تدعم معالجاتها تسريع AES (مثل مجموعة تعليمات AES لمعالجات x86). ونتيجةً لذلك، يُفضّل استخدام ChaCha20 أحيانًا على AES في بعض حالات الاستخدام المتعلقة بالأجهزة المحمولة ، والتي تستخدم في الغالب معالجات ARM . [ 44 ] [ 45 ] كما أن مُسرّعات الأجهزة المُخصصة لبروتوكول ChaCha20 أقل تعقيدًا مقارنةً بمُسرّعات AES. [ 46 ]

ChaCha20-Poly1305 (إصدار IETF؛ انظر أدناه) هي الخوارزمية الحصرية المستخدمة بواسطة نظام WireGuard VPN، اعتبارًا من إصدار البروتوكول 1. [ 47 ]

يستخدم برنامج Adiantum (التشفير) XChaCha12. [ 48 ]

معايير الإنترنت

نُشر مرجع تنفيذي لخوارزمية ChaCha20 في RFC 7539. عدّل تطبيق IETF خوارزمية برنشتاين المنشورة بتغيير قيمة nonce (القيمة العشوائية) وعداد الكتل (القيمة العشوائية) من 64 بت إلى قيمة nonce (القيمة العشوائية) وعداد الكتل (القيمة العشوائية) من 64 بت إلى قيمة nonce (القيمة العشوائية) وعداد الكتل (القيمة العشوائية) من 96 بت وعداد الكتل (عداد الكتل) من 32 بت. [ 49 ] لم يُغيّر اسم الخوارزمية عند تعديلها، لأنه غير ذي أهمية تشفيرية (كلاهما يُشبه قيمة nonce من 128 بت التي يتعرف عليها خبراء التشفير)، ولكن قد يُسبب تغيير واجهة المستخدم بعض الارتباك للمطورين. نظرًا لانخفاض عداد الكتل، فإن أقصى طول للرسالة التي يُمكن تشفيرها بأمان باستخدام نسخة IETF هو 2^ 32 كتلة من 64 بايت (256 جيجابايت ). بالنسبة للتطبيقات التي لا يكفي فيها هذا الطول، مثل تشفير الملفات أو الأقراص، يقترح RFC 7539 استخدام الخوارزمية الأصلية مع قيمة nonce (القيمة العشوائية) من 64 بت.   

الحالة الأولية لـ ChaCha20 (RFC 7539) [ 49 ]
"إكسبا""nd 3""2-by""te k"
مفتاحمفتاحمفتاحمفتاح
مفتاحمفتاحمفتاحمفتاح
عدادنونسينونسينونسي

تم توحيد استخدام بروتوكول ChaCha20 في بروتوكولي IKE و IPsec في RFC 7634. ​​أما توحيد استخدامه في بروتوكول TLS فقد نُشر في RFC 7905 .  

في عام 2018، تم استبدال RFC 7539 بـ RFC 8439. وقد دمج RFC 8439 بعض التصويبات وأضاف اعتبارات أمنية إضافية. [ 50 ] 

انظر أيضاً

  • سبيك — شيفرة الجمع والتدوير والـ XOR التي طورتها وكالة الأمن القومي الأمريكية
  • ChaCha20-Poly1305 — مخطط AEAD يجمع بين ChaCha20 و Poly1305 MAC

ملحوظات

  1. بما أن الجزء الأكبر من العمل يتمثل في تنفيذ جولات متكررة، فإن عدد الجولات يتناسب عكسياً مع الأداء. أي أن تقليل عدد الجولات إلى النصف يُضاعف الأداء تقريباً. وبالتالي، فإن المتغيرات ذات الجولات المُخفّضة تكون أسرع بشكل ملحوظ.

مراجع

  1. 1 2 دانيال ج. بيرنشتاين (24-12-2007). "عائلة Salsa20 من خوارزميات التشفير المتدفقة" ( ملف PDF) . cr.yp.to.
  2. دانيال ج. بيرنشتاين (2013-05-16). "سرعة سالسا 20؛ برنامج سالسا 20" .
  3. 1 2 3 4 جان فيليب أوماسون؛ سيمون فيشر؛ شهرام خزاعي؛ ويلي ماير؛ كريستيان ريشبيرغر (14 مارس 2008). "سمات جديدة للرقصات اللاتينية" (ملف PDF) . الرابطة الدولية لأبحاث التشفير .
  4. بيرنشتاين، دانيال ج. (27-04-2005). "تصميم سالسا 20" (ملف PDF) . تم الاطلاع عليه بتاريخ 27-02-2026 .
  5. 1 2 3 4 بيرنشتاين، دانيال (28 يناير 2008)، تشا تشا، أحد أنواع السالسا 20 (ملف PDF) ، تم الاطلاع عليه بتاريخ 3 يونيو 2018
  6. دانيال ج. بيرنشتاين (2013-05-16). "Snuffle 2005: وظيفة التشفير Salsa20" .
  7. "Salsa20: سرعة البرمجيات" . 2007-05-11.
  8. دانيال ج. بيرنشتاين. "توسيع نطاق رمز Salsa20 (تم تحديثه في عام 2011)" (ملف PDF) . cr.yp.to. تم ​​الاطلاع عليه بتاريخ 18 أغسطس 2022 .
  9. دانيال ج. بيرنشتاين. "توسيع نطاق رمز Salsa20 (النسخة الأصلية)" (ملف PDF) . cr.yp.to. تاريخ الاسترجاع: 18 أغسطس 2022 .
  10. "Salsa20/12" . ECRYPT II . مؤرشف من الأصل بتاريخ 26-02-2018 . تم الاطلاع عليه بتاريخ 22-08-2017 .
  11. «مشروع eSTREAM: نهاية المرحلة الثانية» . eSTREAM . 29 أبريل 2008. مؤرشف من الأصل في 9 يوليو 2016. تم الاطلاع عليه في 19 أبريل 2007 .
  12. هونغجون وو (30 مارس 2007). "المرحلة الثالثة من مشروع eSTREAM: نهاية المرحلة الأولى" . eSTREAM. مؤرشف من الأصل بتاريخ 3 مارس 2016. تم الاطلاع عليه بتاريخ 30 مارس 2006 .
  13. "تقرير موجز عن نهاية المرحلة الثانية من مشروع eSTREAM" (ملف PDF) . eSTREAM. 26 مارس 2007. مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 9 أبريل 2016. تاريخ الاطلاع: 19 أبريل 2007 .
  14. "Salsa20/12، صفحة محفظة eSTREAM" . www.ecrypt.eu.org .
  15. بول كراولي (2006-02-09). "تحليل التشفير التفاضلي المختصر لخمس جولات من Salsa20" .
  16. سيمون فيشر؛ ويلي ماير؛ كوم بيربان؛ جان فرانسوا بياس؛ إم جيه بي روبشو (2006). "عدم العشوائية في مرشحي eSTREAM، سالسا 20 وTSC-4". التقدم في علم التشفير - إندو كريبت 2006: المؤتمر الدولي السابع لعلم التشفير في الهند، كولكاتا، الهند، 11-13 ديسمبر 2006، وقائع المؤتمر . سلسلة محاضرات في علوم الحاسوب. المجلد 4329. الصفحات 2-16 . CiteSeerX 10.1.1.121.7248 . doi : 10.1007/11941378_2 . ISBN    978-3-540-49767-7.
  17. ^ يوكياسو تسونو. تيرو سايتو؛ هيروياسو كوبو؛ توموياسو سوزاكي؛ هيروكي ناكاشيما (2007-01-02). “تحليل الشفرات التفاضلي لـ Salsa20/8” (PDF) . تشفير . مؤرشفة من الأصلي (PDF) بتاريخ 2021-02-25 . تم الاسترجاع 2010/01/11 .
  18. تشنغ تشينغ شي؛ بين تشانغ؛ دينغ قوه فنغ؛ وينلينغ وو (2012). "هجمات استعادة المفاتيح المحسّنة على خوارزميتي سالسا20 وتشاتشا ذات عدد الجولات المخفّض". أمن المعلومات وعلم التشفير - المؤتمر الدولي لأمن المعلومات والتشفير 2012. سلسلة محاضرات في علوم الحاسوب. المجلد 7839. الصفحات 337-351 . doi : 10.1007/978-3-642-37682-5_24 . ISBN   978-3-642-37681-8.
  19. نيكي موها؛ بارت برينيل (2013). "نحو إيجاد الخصائص التفاضلية المثلى لـ ARX: تطبيق على Salsa20" (ملف PDF) . الرابطة الدولية لأبحاث التشفير .
  20. ^ داي، سابياساتشي؛ ميترا، سوبهاموي؛ ساركار، سانتانو؛ شارما، نيتين كومار (2025). "تحليل التشفير المحسّن بشكل ملحوظ لـ Salsa20 بمعايير من جولتين" . أرشيف الطباعة الإلكترونية لعلم التشفير .
  21. 1 2 3 دانيال ج. بيرنشتاين (2008-04-25). "عائلة تشفيرات التدفق ChaCha" .
  22. نيفيس، صموئيل (2009-10-07)، تطبيقات أسرع لـ ChaCha لمعالجات Intel ، مؤرشفة من الأصل في 2017-03-28 ، تم استرجاعها في 2016-09-07 ، اثنان من هذه الثوابت من مضاعفات 8؛ وهذا يسمح بتدوير تعليمة واحدة في معالجات Core2 والمعالجات اللاحقة من Intel باستخدام تعليمة pshufb
  23. Y. Nir; A. Langley (مايو 2015). "ChaCha20 و Poly1305 لبروتوكولات IETF: RFC 7539" .
  24. أركيسزوسكي، سكوت (10 يناير 2020). "XChaCha: eXtended-nonce ChaCha و AEAD_XChaCha20_Poly1305 (مسودة إنترنت منتهية الصلاحية)" . Ietf Datatracker .
  25. أوماسون، جان فيليب (2020). الإفراط في استخدام العملات المشفرة (ملف PDF) . ندوة العملات المشفرة في العالم الحقيقي.
  26. 1 2 "rand_chacha: ضع في اعتبارك ChaCha12 (أو ربما ChaCha8) بدلاً من ChaCha20 · المشكلة رقم 932 · rust-random/rand" . GitHub .
  27. "تشاتشا" . مدخل إلى علم التشفير .
  28. "افعلها: أداء أفضل للهواتف المحمولة باستخدام التشفير" . مدونة كلاود فلير . 23 فبراير 2015. تاريخ الاطلاع: 13 يوليو 2021 .
  29. تومسون، مارتن؛ تيرنر، شون (مايو 2021). "RFC 9001" . datatracker.ietf.org . تاريخ الاسترجاع: 13 يوليو 2021 .
  30. بيشوب، مايك (2 فبراير 2021). "مسودة: بروتوكول HTTP QUIC من IETF" . datatracker.ietf.org . تم الاطلاع عليه بتاريخ 13 يوليو 2021 .
  31. ميلر، داميان (2016-05-03). "ssh/PROTOCOL.chacha20poly1305" . مرجع Super User's BSD: PROTOCOL.chacha20poly1305 . تم الاطلاع عليه بتاريخ 2016-09-07 .
  32. مورينين، قسطنطين أ. (11 ديسمبر 2013). لامر مجهول (محرر). "يحتوي OpenSSH على تشفير جديد - Chacha20-poly1305 - من دي جيه بيرنشتاين" . سلاش دوت . تم الاسترجاع في 7 سبتمبر 2016 .
  33. مورينين، قسطنطين أ. (30 أبريل 2014). سولسكيل (محرر). "لم يعد OpenSSH يعتمد على OpenSSL" . سلاش دوت . تم الاطلاع عليه بتاريخ 7 سبتمبر 2016 .
  34. "مراجعة 317015" . 16-04-2017 . تم الاسترجاع في 16-03-2018 . استبدل خوارزمية RC4 لتوليد أرقام عشوائية آمنة داخل النواة بخوارزمية Chacha20.
  35. غونتر (فيليب غونتر)، محرر. (13-09-2015). "libc/crypt/arc4random.c" . مرجع Super User's BSD: arc4random.c . تم الاسترجاع في 07-09-2016 . مولد أرقام عشوائية قائم على ChaCha لنظام OpenBSD.
  36. riastradh (تايلور كامبل)، محرر. (25-03-2016). "libc/gen/arc4random.c" . مرجع Super User's BSD المتقاطع: arc4random.c . تم الاسترجاع في 07-09-2016 . واجهة برمجة تطبيقات arc4random(3) القديمة من OpenBSD مُعاد تنفيذها باستخدام ChaCha20 PRF، مع حالة لكل مؤشر ترابط.
  37. "kern/subr_csprng.c" . مرجع Super User's BSD: subr_csprng.c . 2015-11-04 . تم الاطلاع عليه بتاريخ 2016-09-07 .chacha_encrypt_bytes
  38. "استخدام ونشر ChaCha" . 2016-09-07 . تم الاطلاع عليه بتاريخ 2016-09-07 .
  39. "arc4random(3)" . صفحات دليل NetBSD . 16-11-2014. مؤرشف من الأصل في 06-07-2020 . تم الاطلاع عليه في 07-09-2016 .
  40. كوربيت، جوناثان. "استبدال /dev/urandom" . أخبار لينكس الأسبوعية . تم الاسترجاع في 20 سبتمبر 2016 .
  41. "دمج الوسم 'random_for_linus' من git.kernel.org/pub/scm/linux/kernel/git/tytso/random" . شجرة مصدر نواة لينكس . تم الاسترجاع في 20 سبتمبر 2016. random: استبدال مجمع الأرقام العشوائية غير المحظورة بمولد أرقام عشوائية مُنشأة (CRNG) قائم على Chacha20
  42. مايكل لارابيل (25 يوليو 2016). "تحسينات على /dev/random لنظام لينكس 4.8" . فورونيكس . تم الاطلاع عليه بتاريخ 3 أكتوبر 2016 .
  43. كوكس، روس؛ فالسوردا، فيليبو. "العشوائية الآمنة في لغة البرمجة Go 1.22" . go.dev .
  44. "ما هي مزايا استخدام خوارزمية ChaCha20 بدلاً من AES؟" . Cryptography Stack Exchange . 2016-04-12.
  45. "دراسة أداء AES-NI SSL @ Calomel.org" .
  46. بفاو، يوهانس؛ رويتر، ماكسيميليان؛ هارباوم، تانيا؛ هوفمان، كلاوس؛ بيكر، يورغن (سبتمبر 2019). "منظور الأجهزة لتشفيرات تشاتشا: تطبيقات تشاتشا 8/12/20 قابلة للتوسع تتراوح من 476 شريحة إلى معدلات بت تصل إلى 175 جيجابت/ثانية". المؤتمر الدولي الثاني والثلاثون لأنظمة على رقاقة (SOCC) التابع لمعهد مهندسي الكهرباء والإلكترونيات (IEEE) لعام 2019. الصفحات 294-299 . doi : 10.1109/SOCC46988.2019.1570548289 . ISBN  978-1-7281-3483-3.
  47. "البروتوكول والتشفير" . واير جارد . جيسون أ. دونينفيلد . تم الاطلاع عليه بتاريخ 4 يوليو 2018 .
  48. إيدج، جيك (16 يناير 2019). "أديانتوم: تشفير للأجهزة منخفضة التكلفة" . LWN.net .
  49. ١ ٢ "ChaCha20 و Poly1305 لبروتوكولات IETF" (ملف PDF) . تم الاطلاع عليه بتاريخ ٧ أغسطس ٢٠١٧. التغييرات عن بروتوكول ChaCha العادي. تم تغيير تقسيم رقم تسلسل الكتلة (nonce:block sequence number split) من ٦٤:٦٤ إلى ٩٦:٣٢ [...] يتم تهيئة حالة ChaCha20 على النحو التالي:
  50. رأسية RFC 7539.