بروتوكول كلمة المرور الآمنة عن بعد
بروتوكول كلمة المرور الآمنة عن بعد ( SRP ) هو بروتوكول تبادل مفاتيح معزز بمصادقة كلمة المرور (PAKE)، مصمم خصيصًا للالتفاف على براءات الاختراع الحالية. [ 1 ]
كما هو الحال في جميع بروتوكولات PAKE، لا يستطيع المتنصت أو الوسيط الحصول على معلومات كافية لتخمين كلمة المرور باستخدام أسلوب التجربة والخطأ أو تنفيذ هجوم القاموس دون مزيد من التفاعلات مع الأطراف المعنية في كل محاولة تخمين. علاوة على ذلك، وباعتباره بروتوكول PAKE مُعززًا، لا يخزن الخادم بيانات مكافئة لكلمة المرور. [ 2 ] هذا يعني أن المهاجم الذي يسرق بيانات الخادم لا يستطيع انتحال شخصية العميل إلا بعد إجراء بحث شامل عن كلمة المرور.
ببساطة، أثناء عملية المصادقة باستخدام بروتوكول SRP (أو أي بروتوكول PAKE آخر)، يُثبت أحد الطرفين (العميل أو المستخدم) للطرف الآخر (الخادم) معرفته بكلمة المرور، دون إرسال كلمة المرور نفسها أو أي معلومات أخرى يمكن من خلالها استنتاجها. تبقى كلمة المرور محفوظة لدى العميل، ولا يعرفها الخادم.
علاوة على ذلك، يحتاج الخادم أيضًا إلى معرفة كلمة المرور (وليس كلمة المرور نفسها) لإنشاء اتصال آمن. وهذا يعني أن الخادم يُصادق على نفسه لدى العميل، مما يمنع عمليات التصيد الاحتيالي دون الاعتماد على قيام المستخدم بتحليل عناوين URL المعقدة.
الخاصية الأمنية الوحيدة المثبتة رياضيًا لبروتوكول SRP هي أنه يُعادل بروتوكول ديفي-هيلمان ضد المهاجم السلبي . [ 3 ] على الرغم من نضج بروتوكول SRP وانتشاره الواسع، إلا أنه تصميم قديم، وتُظهر بعض متغيراته نقاط ضعف خفية؛ فهو ليس آمنًا وفقًا لمعيار UC ، ويفتقر إلى مقاومة جميع هجمات الحساب المسبق ، ولديه براهين رسمية أضعف، ولا يوفر أي حماية ضد بعض نماذج الهجمات الحديثة. لهذه الأسباب، يُعتبر بروتوكول SRP الآن متجاوزًا إلى حد كبير. يُعد بروتوكول OPAQUE هو بروتوكول PAKE المُعزز المُفضل، بينما يُفضل استخدام بروتوكولي CPace أو SPAKE2 في سيناريوهات PAKE المتوازنة حيث يتشارك الطرفان كلمة المرور. [ 4 ] [ 5 ]
ملخص
يتمتع بروتوكول SRP بعدد من الخصائص المرغوبة: فهو يسمح للمستخدم بالتحقق من هويته لدى الخادم، ويقاوم هجمات القاموس التي يشنها المتنصت، ولا يتطلب طرفًا ثالثًا موثوقًا به . ينقل البروتوكول فعليًا دليلًا على كلمة المرور دون معرفة مسبقة من المستخدم إلى الخادم. في الإصدار السادس من البروتوكول، لا يمكن تخمين سوى كلمة مرور واحدة لكل محاولة اتصال. ومن الخصائص المهمة لهذا البروتوكول أنه يظل آمنًا حتى في حال تعرض عنصر أو عنصرين من عناصر التشفير المستخدمة فيه للهجوم. وقد خضع بروتوكول SRP للمراجعة عدة مرات، وهو حاليًا في الإصدار 6a.
يُنشئ بروتوكول SRP مفتاحًا خاصًا كبيرًا مشتركًا بين الطرفين بطريقة مشابهة لتبادل مفاتيح ديفي-هيلمان ، حيث يمتلك العميل كلمة مرور المستخدم، بينما يمتلك الخادم مُدقِّقًا تشفيريًا مُشتقًا من كلمة المرور. يُشتق المفتاح العام المشترك من رقمين عشوائيين، أحدهما يُولِّده العميل والآخر يُولِّده الخادم، وهما فريدان لكل محاولة تسجيل دخول. في الحالات التي تتطلب اتصالات مُشفَّرة ومصادقة، يُعد بروتوكول SRP أكثر أمانًا من بروتوكول SSH البديل ، وأسرع من استخدام تبادل مفاتيح ديفي-هيلمان مع الرسائل المُوقَّعة. كما أنه مستقل عن الأطراف الخارجية، على عكس بروتوكول Kerberos .
تم وصف بروتوكول SRP، الإصدار 3 في RFC 2945. كما يتم استخدام الإصدار 6a من SRP للمصادقة القوية لكلمة المرور في SSL/TLS [ 6 ] (في TLS-SRP ) ومعايير أخرى مثل EAP [ 7 ] و SAML ، وهو جزء من IEEE 1363.2 وISO/IEC 11770-4.
بروتوكول
تُستخدم الرموز التالية في هذا الوصف للبروتوكول، الإصدار 6:
- يتم اختيار q و N = 2q + 1 بحيث يكون كلاهما أوليين (مما يجعل q عددًا أوليًا وفقًا لنظرية صوفي جيرمان ، و N عددًا أوليًا آمنًا ). يجب أن يكون N كبيرًا بما يكفي بحيث يصبح حساب اللوغاريتمات المنفصلة بتردد N غير ممكن عمليًا.
- تُجرى جميع العمليات الحسابية في حلقة الأعداد الصحيحة بتردد N ،هذا يعني أنه يجب قراءة g x أدناه على أنها g x mod N
- g هو مولد المجموعة الضربية.
- H () هي دالة تجزئة ؛ على سبيل المثال، SHA-256.
- k هو مُعامل مُستنتج من كلا الطرفين؛ في SRP-6، k = 3، بينما في SRP-6a يُستنتج من N و g : k = H ( N , g ). يُستخدم لمنع تخمين 2 مقابل 1 عندما ينتحل مُهاجم نشط شخصية الخادم. [ 8 ] [ 9 ]
- s هو ملح .
- I هو اسم المستخدم التعريفي.
- p هي كلمة مرور المستخدم.
- يمثل v مُدقِّق كلمة مرور المضيف، حيث v = g x، ويكون x على الأقل = H ( s , p ). وبما أن x يُحسب فقط على جهاز العميل، فإنه حر في اختيار خوارزمية أقوى. يمكن للتطبيق استخدام x = H ( s | I | p ) دون التأثير على أي خطوات مطلوبة من المضيف. يُعرّف المعيار RFC2945 الخوارزمية x = H ( s | H ( I | ":" | p ) ) . استخدام I ضمن x يمنع الخادم الخبيث من معرفة ما إذا كان مستخدمان يتشاركان كلمة المرور نفسها .
- A و B عبارة عن مفاتيح مؤقتة عشوائية لمرة واحدة للمستخدم والمضيف على التوالي.
- | (الخط العمودي) يدل على الربط.
يتم تعريف جميع المتغيرات الأخرى بدلالة هذه المتغيرات.
أولًا، لإنشاء كلمة مرور p مع الخادم Steve، تختار العميلة Carol قيمة عشوائية s ، وتحسب x = H ( s , p )، و v = gx . يخزن Steve القيمتين v و s ، المفهرستين بالرمز I ، كمُدقِّق لكلمة مرور Carol وقيمة عشوائية s. يجب على Carol عدم مشاركة x مع أي شخص، ويجب عليها حذفها بأمان في هذه الخطوة، لأنها تُعادل كلمة المرور p كنص عادي . تُستكمل هذه الخطوة قبل استخدام النظام كجزء من تسجيل المستخدم مع Steve. تجدر الإشارة إلى أن القيمة العشوائية s تُشارك وتُتبادل للتفاوض على مفتاح جلسة لاحقًا، لذا يمكن لأي من الطرفين اختيار القيمة، ولكن يتم ذلك بواسطة Carol حتى تتمكن من تسجيل I و s و v في طلب تسجيل واحد. لا يُغطي بروتوكول SRP عملية إرسال طلب التسجيل والتحقق من صحته.
ثم لإجراء عملية التحقق من كلمة المرور في وقت لاحق، يتم تنفيذ بروتوكول التبادل التالي:
- كارول → ستيف: توليد قيمة عشوائية a ؛ إرسال I و A = g a
- ستيف → كارول: توليد قيمة عشوائية b ؛ إرسال s و B = kv + g b
- كلاهما: u = H ( A , B )
- كارول: S كارول = ( B − kg x ) ( a + ux ) = ( kv + g b − kg x ) ( a + ux ) = ( kg x − kg x + g b ) (a + ux) = ( g b ) ( a + ux )
- كارول: ك كارول = ح ( س كارول )
- ستيف: S Steve = ( Av u ) b = ( g a v u ) b = [ g a ( g x ) u ] b = ( g a + ux ) b = ( g b ) (a + ux)
- ستيف: ك ستيف = ح ( س ستيف ) = ك كارول
يمتلك الطرفان الآن مفتاح جلسة مشتركًا وقويًا (K) . لإتمام عملية المصادقة، يحتاج كل منهما إلى إثبات تطابق مفتاحه للآخر. إحدى الطرق الممكنة هي كالتالي:
- كارول → ستيف: M 1 = H [ H ( N ) XOR H ( g ) | H ( I ) | s | A | B | K كارول ] . ستيف يتحقق من M 1 .
- ستيف → كارول: M 2 = H ( A | M 1 | K Steve ) . كارول تتحقق من صحة M 2 .
تتطلب هذه الطريقة تخمين المزيد من المعلومات المشتركة لتحقيق النجاح في انتحال الهوية، وليس فقط المفتاح. ورغم أن معظم هذه المعلومات الإضافية عامة، إلا أنه يمكن إضافة معلومات خاصة بأمان إلى مدخلات دالة التجزئة، مثل المفتاح الخاص بالخادم.
بدلاً من ذلك، في إثبات يعتمد على كلمة المرور فقط، يمكن تخطي حساب K وإثبات S المشتركة باستخدام:
- كارول → ستيف: M 1 = H ( A | B | S كارول ) . ستيف يتحقق من M 1 .
- ستيف → كارول: M 2 = H ( A | M 1 | S Steve ) . كارول تتحقق من صحة M 2 .
عند استخدام بروتوكول SRP للتفاوض على مفتاح مشترك K يُستخدم مباشرةً بعد التفاوض، قد يميل البعض إلى تخطي خطوتي التحقق M1 و M2 . سيرفض الخادم أول طلب من العميل لا يستطيع فك تشفيره. مع ذلك، قد يكون هذا الأمر خطيرًا كما هو موضح في قسم " مخاطر التنفيذ" أدناه .
كما يستخدم الطرفان الضمانات التالية:
- ستجهض كارول إذا تلقت B = 0 (mod N ) أو u = 0.
- سيقوم ستيف بالإجهاض إذا تلقى A (mod N ) = 0.
- يجب على كارول أن تُقدّم برهانها على صحة K (أو S ) أولاً. إذا اكتشف ستيف أن برهان كارول غير صحيح، فعليه أن يُنهي العملية دون أن يُقدّم برهانه الخاص على صحة K (أو S ).
مثال على كود بلغة بايثون
مثال على مصادقة SRPتحذير: لا تستخدم هذا الكود لأغراض التشفير الحقيقية إلا لأغراض الاختبار. تحذير: يفتقر الكود أدناه إلى إجراءات حماية مهمة، فهو لا يتحقق من أن قيم A وB وU ليست أصفارًا.استنادًا إلى http://srp.stanford.edu/design.html """ استيراد hashlib استيراد random# ملاحظة: يتم تحويل str كما هي، سيتم تحويل str([1,2,3,4]) إلى "[1,2,3,4]" def H ( * args ) -> int : """دالة تجزئة أحادية الاتجاه.""" a = ":" . join ( str ( a ) for a in args ) return int ( hashlib . sha256 ( a . encode ( "utf-8" )) . hexdigest (), 16 )دالة cryptrand ( n : عدد صحيح = 1024 ) : تُرجع random.SystemRandom ( ) . getrandbits ( n ) % N# عدد أولي كبير وآمن (N = 2q+1، حيث q عدد أولي) # جميع العمليات الحسابية تتم بتردد N # (تم إنشاؤه باستخدام "openssl dhparam -text 1024") N = """00:c0:37:c3:75:88:b4:32:98:87:e6:1c:2d:a3:32: 4b:1b:a4:b8:1a:63:f9:74:8f:ed:2d:8a:41:0c:2f: c2: 1b:12:32:f0:d3:bf:a0:24:27:6c:fd:88:44:81: 97 :aa:e4:86:a6:3b:fc:a7:b8:bf:77:54:df:b3:27: c7:20:1f:6f:d1:7f:d7:fd:74:15:8b:d3:1c:e7:72: c9:f5:f8:ab:58:45:48:a9:9a:75:9b:5a:2c:05:32: 16:2b:7b:62:18:e8:f1:42:bc:e2:c3:0d:77:84:68: 9a:48:3e:09:5e:70:16:18:43:79:13:a8:c3:9c:3d: d0:d4:ca:3c:50:0b:88:5f:e3"""N = int ( "" . join ( N . split ()) . replace ( ":" , "" ), 16 ) g = 2 # مولد modulo Nk = H ( N , g ) # معامل الضرب (k=3 في SRP-6 القديم)F = '#0x' # مُحدد التنسيقprint ( "#. H, N, g, و k معروفة مسبقًا لكل من العميل والخادم:" ) print ( f ' { H =} \n { N = :{ F }} \n { g = :{ F }} \n { k = :{ F }} ' )print ( " \n 0. server stores (I, s, v) in its password database" )# يجب على الخادم أولاً إنشاء مُدقِّق كلمة المرور I = "person" # اسم المستخدم p = "password1234" # كلمة المرور s = cryptrand ( 64 ) # الملح للمستخدم x = H ( s , I , p ) # المفتاح الخاص v = pow ( g , x , N ) # مُدقِّق كلمة المرورprint ( f ' { I =} \n { p =} \n { s = :{ F }} \n { x = :{ F }} \n { v = :{ F }} ' )# 0. يخزن الخادم (I، s، v) في قاعدة بيانات كلمات المرور الخاصة به # I = 'person' # p = 'password1234' # s = 0x67bc8932cfd26a49 # x = 0x98a4bce8dde877762a90222f1a1161eba9248590a47eb83aa9e5bd7ecda5368d # v = 0xa7e2038e675d577ac0f318999cab67bba7ec2daf45d2d09f7911b1b78d2fc7f963cd0ac8f17851e0516f059e453672c3b70fcecf5f6843180b271a bdd01f552ccda7b24fe4719336409cbc1352f8517be651b8935cc0b74ff2819fa07a3f031537d4cfd9f8df7b788a5f2f88e1cd4106b35c38b3d7205a# <عرض توضيحي> --- توقف ---print ( " \n1 . يرسل العميل اسم المستخدم I والقيمة العامة المؤقتة A إلى الخادم" ) a = cryptrand () A = pow ( g , a , N ) print ( f " { I =} \n { A = :{ F }} " ) # client->server(I, A)# 1. يرسل العميل اسم المستخدم I والقيمة العامة المؤقتة A إلى الخادم # I = 'شخص' # A = 0x678556a7e76581e051af656e8cee57ae46df43f1fce790f7750a3ec5308a85da4ec4051e5cb74d3e463685ee975a2747cf49035be67c931b56e793 f23ea3524af8909dcfbc8675d872361025bf884778587ac49454a57c53a011ac2be2839bfb51bf7847a49a483aba870dc7a8b467a81cec91b8ae7813# <عرض توضيحي> --- توقف ---print ( " \n2 . يرسل الخادم قيمة التشفير s الخاصة بالمستخدم والقيمة العامة المؤقتة B إلى العميل" ) b = cryptrand () B = ( k * v + pow ( g , b , N )) % N print ( f " { s = :{ F }} \n { B = :{ F }} " ) # server->client(s, B)# 2. يرسل الخادم قيمة الملح s الخاصة بالمستخدم والقيمة العامة المؤقتة B إلى العميل # s = 0x67bc8932cfd26a49 # B = 0xb615a0a5ea6abf138077bbd869f6a8da37dfc0b7e06a9f5fac5c1e4109c6302cb3e94dcc2cc76da7b3d87d7e9b68a1db998ab239cfde609f3f7a1e Ce4a491ce3d9a665c20cf4e4f06730daaa8f52ed61e45bbb67cdc337bf648027ffa7f0f215d5ebe43f9f51832518f1142266aae0dfa960e0082b5154# <عرض توضيحي> --- توقف ---print ( " \n3 . يقوم العميل والخادم بحساب معامل التشفير العشوائي" ) u = H ( A , B ) # معامل التشفير العشوائي print ( f " { u = :{ F }} " )# 3. يقوم كل من العميل والخادم بحساب معامل التشفير العشوائي # u = 0x796b07e354c04f672af8b76a46560655086355a9bbce11361f01b45d991c0c52# <عرض توضيحي> --- توقف ---print ( " \n4 . يحسب العميل مفتاح الجلسة" ) x = H ( s , I , p ) S_c = pow ( B - k * pow ( g , x , N ), a + u * x , N ) K_c = H ( S_c ) print ( f " { S_c = :{ F }} \n { K_c = :{ F }} " )# 4. يقوم العميل بحساب مفتاح الجلسة # S_c = 0x699170aff6e9f08ed09a1dff432bf0605b8bcba05aadcaeea665757d06dbda4348e211d16c10ef4678585bcb2809a83c62b6c19d97901274ddafd4075f90604c06baf036af587af8540342b47867eaa22b9ca5e35ac14c8e85a0c4e623bd855828dffd513cea4d829c407137a0dd81ab4cde8a904c45cc # K_c = 0x43f8df6e1d2ba762948c8316db5bf03a7af49391742f5f51029630711c1671e# <عرض توضيحي> --- توقف ---print ( " \n5 . server computes session key" ) S_s = pow ( A * pow ( v , u , N ), b , N ) K_s = H ( S_s ) print ( f " { S_s = :{ F }} \n { K_s = :{ F }} " )# 5. يقوم الخادم بحساب مفتاح الجلسة # S_s = 0x699170aff6e9f08ed09a1dff432bf0605b8bcba05aadcaeea665757d06dbda4348e211d16c10ef4678585bcb2809a83c62b6c19d97901274ddafd4075f90604c06baf036af587af8540342b47867eaa22b9ca5e35ac14c8e85a0c4e623bd855828dffd513cea4d829c407137a0dd81ab4cde8a904c45cc # K_s = 0x43f8df6e1d2ba762948c8316db5bf03a7af49391742f5f51029630711c1671e# <عرض توضيحي> --- توقف ---print ( " \n6 . يرسل العميل إثبات مفتاح الجلسة إلى الخادم" ) M_c = H ( H ( N ) ^ H ( g ), H ( I ), s , A , B , K_c ) print ( f " { M_c = :{ F }} " ) # client->server(M_c); يتحقق الخادم من M_c# 6. يرسل العميل إثبات مفتاح الجلسة إلى الخادم # M_c = 0x75500df4ea36e06406ac1f8a8241429b8e90a8cba3adda3405c07f19ea3101e8# <عرض توضيحي> --- توقف ---print ( " \n7 . يرسل الخادم إثبات مفتاح الجلسة إلى العميل" ) M_s = H ( A , M_c , K_s ) print ( f " { M_s = :{ F }} " ) # server->client(M_s); يتحقق العميل من M_s# 7. يرسل الخادم إثبات مفتاح الجلسة إلى العميل # M_s = 0x182ed24d1ad2fb55d2268c46b42435d1ef02e0fc49f647c03dab8b2a48b0bd3dمآزق التنفيذ
هجوم تخمين كلمات المرور دون اتصال بالإنترنت باستخدام نظام مراسلة الخادم أولاً في غياب التحقق من المفتاح
إذا أرسل الخادم رسالة مشفرة دون انتظار التحقق من العميل، فسيتمكن المهاجم من شن هجوم تخمين كلمات المرور دون اتصال بالإنترنت، على غرار اختراق التشفير. قد يحدث هذا إذا أرسل الخادم رسالة مشفرة في الحزمة الثانية مع الملح و B ، أو إذا تم تخطي التحقق من المفتاح وأرسل الخادم (بدلاً من العميل) الرسالة المشفرة الأولى. يُعد هذا الأمر مغريًا، لأنه بعد الحزمة الأولى مباشرةً، يمتلك الخادم جميع المعلومات اللازمة لحساب المفتاح المشترك K.
كان الهجوم على النحو التالي:
- كارول → ستيف: توليد قيمة عشوائية a ؛ إرسال I و A = g a
- ستيف: u = H ( A , B ); S = Av u ; K = H ( S )
- ستيف: يقوم بإنشاء الرسالة m وتشفيرها لإنتاج c =ENC( K , m )
- ستيف → كارول: توليد قيمة عشوائية b ؛ إرسال s ، B = kv + g b و c
كارول لا تعرف x أو v . ولكن إذا أعطيت لها كلمة مرور p، فيمكنها حساب ما يلي:
- x p = H (salt, p )
- S p = ( B - كجم x p ) ( a + ux p )
- K p = H ( S p )
K<sub> p</sub> هو المفتاح الذي سيستخدمه ستيف إذا كانت p هي كلمة المرور المتوقعة. جميع القيم اللازمة لحساب K<sub> p</sub> إما تتحكم بها كارول أو معروفة من الحزمة الأولى المرسلة من ستيف. يمكن لكارول الآن محاولة تخمين كلمة المرور، وإنشاء المفتاح المقابل، ومحاولة فك تشفير رسالة ستيف المشفرة c للتحقق من صحة المفتاح. نظرًا لأن رسائل البروتوكول عادةً ما تكون منظمة، يُفترض أن تحديد ما إذا تم فك تشفير c بشكل صحيح أمر سهل. هذا يسمح باستعادة كلمة المرور دون اتصال بالإنترنت.
لم يكن هذا الهجوم ليحدث لو انتظر ستيف حتى تثبت كارول قدرتها على حساب المفتاح الصحيح قبل إرسال رسالة مشفرة. لا تتأثر التطبيقات السليمة لبروتوكول SRP بهذا الهجوم، إذ لن يتمكن المهاجم من اجتياز خطوة التحقق من المفتاح.
هجوم تخمين الكلمات غير المتصل بالإنترنت والمبني على توقيت الهجوم
في عام 2021، نشر دانيال دي ألميدا براغا، وبيير آلان فوك، ومحمد سبت بحثًا بعنوان "باراسايت" [ 10 ] ، حيث قدموا فيه عرضًا عمليًا لاستغلال هجوم التوقيت عبر الشبكة. يستغل هذا الهجوم تطبيقات غير ثابتة لعملية الأسس المعيارية للأعداد الكبيرة، وقد أثر بشكل خاص على مكتبة OpenSSL.
التطبيقات
- متغيرات SRP-6: مكتبة جافا للعناصر الأساسية للتشفير المطلوبة لتنفيذ بروتوكول SRP-6.
- OpenSSL الإصدار 1.0.1 أو أحدث.
- تحتوي مكتبة بوتان (مكتبة التشفير المكتوبة بلغة C++) على تطبيق لبروتوكول SRP-6a
- TLS-SRP عبارة عن مجموعة من مجموعات التشفير لأمن طبقة النقل التي تستخدم SRP.
- تطبيق srp-client SRP-6a بلغة JavaScript (متوافق مع RFC 5054)، مفتوح المصدر، مرخص بموجب رخصة Mozilla العامة (MPL).
- تتضمن مكتبة التشفير JavaScript تطبيقًا بلغة JavaScript لبروتوكول SRP، وهي مفتوحة المصدر ومرخصة بموجب ترخيص BSD .
- يوفر Gnu Crypto تطبيقًا بلغة Java مرخصًا بموجب رخصة GNU العامة مع "استثناء المكتبة"، والذي يسمح باستخدامه كمكتبة بالاقتران مع البرامج غير الحرة.
- يوفر "فيلق القلعة النطاطة" تطبيقات بلغة جافا وسي شارب بموجب ترخيص MIT .
- Nimbus SRP هي مكتبة جافا توفر مولدًا للمُدقِّق، وجلسات من جانب العميل والخادم. تتضمن واجهات لمفتاح كلمة مرور مخصص، وروتينات رسائل إثبات من جانب العميل والخادم. لا تعتمد على أي مكتبات خارجية. مُرخصة بموجب رخصة Apache 2.0 .
- srplibcpp هي مكتبة C++ مبنية على MIRACL .
- DragonSRP هو تطبيق معياري مكتوب بلغة C++ ويعمل حاليًا مع OpenSSL .
- يوفر Json2Ldap مصادقة SRP-6a لخوادم دليل LDAP .
- تطبيق csrp SRP-6a بلغة C.
- تطبيق Crypt-SRP SRP-6a في لغة بيرل .
- تطبيق pysrp SRP-6a في بايثون (متوافق مع csrp ).
- تطبيق py3srp SRP-6a بلغة بايثون 3 النقية .
- أدوات srptools لتنفيذ مصادقة كلمة المرور الآمنة عن بُعد (SRP) في بايثون . مكتبات متوافقة تم التحقق منها .
- يقوم نظام الحسابات في إطار عمل الويب Meteor بتطبيق مبدأ SRP للتحقق من صحة كلمة المرور.
- تطبيق SRP-6a في لغة روبي (srp-rb) .
- تطبيق falkmueller demo SRP-6a لتصميم بروتوكول ستانفورد SRP في JavaScript و PHP بموجب ترخيص MIT .
- srp-6a-demo تطبيق SRP-6a في PHP و JavaScript .
- تطبيق thinbus-srp-js لبروتوكول SRP-6a بلغة جافا سكريبت . يتضمن فئات جافا متوافقة تستخدم بروتوكول SRP الخاص بـ Nimbus. مؤرشف بتاريخ ٢٢ فبراير ٢٠١٤ على موقع Wayback Machine. تطبيق تجريبي يستخدم Spring Security . يوجد أيضًا تطبيق تجريبي آخر يُجري عملية مصادقة على خادم PHP . مُرخص بموجب رخصة Apache .
- تقوم مكتبة ستانفورد جافا سكريبت للتشفير (SJCL) بتنفيذ مبدأ SRP لتبادل المفاتيح.
- node-srp هو تطبيق جافا سكريبت للعميل والخادم (node.js) لـ SRP.
- تطبيق SRP6 للغة C# و Java في C# و Java.
- ALOSRPAuth هو تطبيق Objective-C لـ SRP-6a.
- go-srp هو تطبيق بلغة Go لـ SRP-6a.
- tssrp6a هو تطبيق TypeScript لـ SRP-6a.
- مكتبة TheIceNet Cryptography Java لتطوير تطبيقات Spring Boot القائمة على التشفير. تُطبّق مبدأ SRP-6a. مرخصة بموجب رخصة Apache .
- تطبيق SRP-6a في .NET
- يستخدم Apple Homekit بروتوكول SRP عند الاقتران مع ملحقات وأجهزة المنزل "الذكية".
- مصادقة بروتون ميل لتشفير البريد الإلكتروني
- SRP هو تطبيق Go لـ SRP، ويستخدم للتحقق من هوية المستخدمين على Posterity .
تاريخ
بدأ مشروع SRP في عام 1997. [ 11 ] نتج عن نهجين مختلفين لمعالجة ثغرة أمنية في SRP-1 كل من SRP-2 وSRP-3. [ 12 ] نُشر SRP-3 لأول مرة في مؤتمر عام 1998. [ 13 ] نُشرت RFC 2945، التي تصف SRP-3 باستخدام SHA1، في عام 2000. [ 14 ] نُشر SRP-6، الذي يعالج هجمات التخمين وترتيب الرسائل من نوع "اثنان مقابل واحد"، في عام 2002. [ 8 ] ظهر SRP-6a في مكتبة "libsrp" الرسمية في الإصدار 2.1.0، بتاريخ 2005. [ 15 ] يُشار إلى SRP-6a في المعايير على النحو التالي:
- ISO/IEC 11770-4:2006 "آلية الاتفاق الرئيسية 2" (تسمي الطريقة "SRP-6، ولكن لديها حساب k 6a)
- RFC 5054 TLS-SRP لعام 2007 (يشار إليه مرة أخرى باسم "SRP-6"، ولكن تم تصحيحه في الخطأ المطبعي [ 16 ] )
- IEEE Std 1363.2-2008 "DLAPKAS-SRP6" (يشار إليه مرة أخرى باسم "SRP-6") [ 17 ]
يتضمن معيار IEEE 1363.2 أيضًا وصفًا لـ "SRP5"، وهو متغير يستبدل اللوغاريتم المنفصل بمنحنى إهليلجي ساهم به يونغجي وانغ في عام 2001. [ 18 ] كما يصف SRP-3 كما هو موجود في RFC 2945.
انظر أيضاً
مراجع
- ↑ "ما هو برنامج SRP؟" . جامعة ستانفورد .
- ↑ شيرمان، آلان ت.؛ لانوس، إيرين؛ ليسكوف، موسى؛ زيغلر، إدوارد؛ تشانغ، ريتشارد؛ غولاسزيفسكي، إنيس؛ ونوك-فينك، رايان؛ بونيادي، سايروس ج.؛ ياكسيتيغ، ماريو (2020)، نيغام، فيفيك؛ بان كيريغين، تاجانا؛ تالكوت، كارولين؛ غوتمان، جوشوا (محررون)، "تحليل الأساليب الرسمية لبروتوكول كلمة المرور الآمنة عن بُعد"، المنطق واللغة والأمن: مقالات مُهداة إلى أندريه سيدروف بمناسبة عيد ميلاده الخامس والستين ، سلسلة محاضرات في علوم الحاسوب، تشام: دار نشر سبرينغر الدولية، ص 103-126 ، arXiv : 2003.07421 ، doi : 10.1007/978-3-030-62077-6_9 ، ISBN 978-3-030-62077-6
{{citation}}: CS1 maint: work parameter with ISBN ( link ) - ↑ غرين، ماثيو (18 أكتوبر 2018). "هل يجب عليك استخدام SRP؟" . بعض الأفكار حول هندسة التشفير .ملاحظة: يشير المصدر إلى SRP-6 باسم SRPv4 لسبب غير معروف.
- ↑ عبد الله، ميشيل؛ هاس، بيورن؛ هيس، جوليا (16 أبريل 2025). CPace، بروتوكول PAKE متوازن وقابل للتركيب . IETF . المعرف: draft-irtf-cfrg-cpace-14 . تاريخ الاسترجاع: 15 سبتمبر 2025 .
- ↑ "نتائج عملية اختيار PAKE" (ملف PDF) . مجموعة أبحاث منتدى العملات المشفرة التابعة لفرقة عمل أبحاث الإنترنت (IRTF CFRG). أبريل 2020. تاريخ الاطلاع: 15 سبتمبر 2025 .
- ↑ تايلور، ديفيد؛ وو، توم؛ مافروجيانوبولوس، نيكوس؛ بيرين، تريفور (نوفمبر 2007). "استخدام بروتوكول كلمة المرور عن بعد الآمنة (SRP) لمصادقة TLS" .RFC 5054
- ↑ كارلسون، جيمس؛ أبوبا، برنارد؛ هافيرينين، هنري (يوليو 2001). "بروتوكول مصادقة EAP SRP-SHA1" . IETF.مسودة.
- 1 2 وو، توم (29 أكتوبر 2002). SRP-6: تحسينات وتطويرات على بروتوكول كلمة المرور الآمنة عن بعد (تقرير فني).
- ↑ "تصميم بروتوكول SRP" .
- ↑ دي ألميدا براغا، دانيال؛ فوك، بيير آلان؛ سابت، محمد (2021). "باراسايت: هجوم استعادة كلمة المرور ضد تطبيقات SRP في البرية" . وقائع مؤتمر ACM SIGSAC لعام 2021 حول أمن الحاسوب والاتصالات . الصفحات 2497-2512 . doi : 10.1145/3460120.3484563 . ISBN 978-1-4503-8454-4تم الاطلاع عليه بتاريخ 8 نوفمبر 2023 .
- ↑ "SRP: حول المشروع" . srp.stanford.edu .
- ↑ "SRP-2: مواصفات التصميم" . srp.stanford.edu .
- ↑ وو، تي، " بروتوكول كلمة المرور الآمنة عن بعد "، وقائع ندوة أمن الشبكات والأنظمة الموزعة لعام 1998 لجمعية الإنترنت، الصفحات 97-111، مارس 1998.
- ↑ "مواصفات التصميم SRP" . srp.stanford.edu .
- ↑ ملف التغييرات في srp-2.1.2.tar.gz، متاح من http://srp.stanford.edu/download.html
- ^ وانغ ، مينجي. "تقرير أخطاء RFC رقم 7538" . محرر آر إف سي . تم الاسترجاع في 15 أكتوبر 2023 .
- ↑ IEEE 1363.2-2008: مواصفات IEEE القياسية لتقنيات التشفير بالمفتاح العام القائمة على كلمات المرور
- ↑ وانغ، واي، "IEEE P1363.2 Submission / D2001-06-21،" [P1363.2-ecsrp-06-21.doc] مساهمة من يونغجي وانغ لـ P1363.2 تقدم نسخة منحنى إهليلجي من بروتوكول SRP، 21 يونيو 2001.
روابط خارجية
- الموقع الرسمي
- رخصة SRP — رخصة BSD مثل المصادر المفتوحة.
- براءة الاختراع رقم US6539479 - SRP (انتهت صلاحيتها في 12 مايو 2015 بسبب عدم دفع رسوم الصيانة (وفقًا لبراءات اختراع جوجل). كان من المقرر في الأصل أن تنتهي صلاحيتها في يوليو 2018).
صفحات الدليل
- pppd(8) : برنامج تشغيل بروتوكول الاتصال من نقطة إلى نقطة
- srptool(1) : أداة بسيطة لكلمات مرور SRP
RFCs
- RFC 2944 - مصادقة Telnet: SRP
- RFC 2945 - نظام المصادقة وتبادل المفاتيح SRP (الإصدار 3)
- RFC 3720 - واجهة أنظمة الكمبيوتر الصغيرة عبر الإنترنت (iSCSI)
- RFC 3723 - تأمين بروتوكولات تخزين الكتل عبر بروتوكول الإنترنت
- RFC 3669 - إرشادات لمجموعات العمل المعنية بقضايا الملكية الفكرية
- RFC 5054 - استخدام بروتوكول كلمة المرور الآمنة عن بُعد (SRP) لمصادقة TLS
روابط أخرى
- IEEE 1363
- شرائح الملكية الفكرية لشركة SRP (ديسمبر 2001 - ربما تم إلغاؤها) انتهت صلاحية براءات اختراع EKE المذكورة في عامي 2011 و 2013.
- بروتوكولات اتفاقية المفاتيح
- مصادقة كلمة المرور
