مضى على الشبكة و يوم من العطاء.
  • تحذير: يجب على كل روّاد الشبكة تشغيل برامج الاختراق داخل الأنظمة الوهمية وهي بهدف التعلم وحماية الأعضاء والتوعية بها

التشفير ال غير متماثل و شرح ال RSA

ibadaibada is verified member.

./عضو جديد
>:: v1p ::<

السمعة:

السلام عليكم و رحمة الله تعالى و بركاته.

في هذه المقالة سوف نشرح التشفير الغير متماثل .


قد تحتاج إلى فهم الترديد ومعكوس عدد ما بترديد معين.

في ظل التقدم التقني لنفترض ظهور تقنية في عالم الأقفال (لن أستغرب إذا كانت موجودة بالفعل) حيث
تشتري المفاتيح وحدهم و تباع المفاتيح مثنى مثنى (أي تشتري مفتاحين توجد علاقة كامنة بينهم) و القفل

وحده, بدل المفتاح الذي يستخدم في الفتح و الغلق نحن إشترينا مفتاحين بحيث يستخدم
الأول للغلق (أي أنني أستطيع أي قفل بإستخدام هذا المفتاح) و الثاني للفتح (حيث أستطيع فتح أي قفل أغلقته بأستخدام المفتاح الأول)



فإذا كنت سأرسل صندوقًا إلى شرودنجر👨‍🦱، فسأستخدم مفتاحه الأول لإغلاق الصندوق، ثم يقوم شرودنجر باستخدام مفتاحه الثاني لفتحه، ليجد أن قطته ما زالت حية..

شرودنجر شخص عبقري لذلك فهو يعرف أنه من الشئ العادي أو الطبيعي ترك مفتاحه الأول متاح للعامة فهو يدري و يعلم أنه لا ضرر من ذلك لأنه خاص بالإغلاق فقط لذلك يسمى بالمفتاح العام و إذا قام بتخبئته فلن يستطيع أحد أن يغلق القفل بإستخدام مفتاحه أي أن لا أحد يستطيع أن يؤمن الصناديق التي يرسلها إليه و هو شخص حذر جدا لذلك فهو يقوم بتخبئة مفتاحه الثاني بطرق ماكرة جدا فهو يعلم أنه إذا إستحوذ عليه شخص من العامة فسيستطيع فتح أي قفل خاص به لذلك فهو يسمى بالمفتاح الخاص.
قد يلاحظ البعض أن شرودنجر هو الشخص الوحيد الذي يمكنه فتح الصندوق الذي أرسلته له , في الحقيقة أي شخص يستطيع فتحه إذا كان يملك مفتاحه الخاص و أي شخص لديه الإمكانيات و الموارد اللازمة لكسر هذا القفل .
لماذا نستخدم القفل ؟ لحماية محتوى الصندوق.

إذا فهمت هذا التشبيه فستكون قد فهمت التشفير ال غير المتماثل حيث :

القفل هو دالة التشفير.

المفتاح الخاص و المفتاح العام هما المفتاح الخاص و المفتاح العام
أنا هو المرسل و شرودنجر هو المستقبل و الصندوق هو المعلومة التي نريد تشفيرها.

لماذا نريد تشفيرها ؟ لحمايتها.

1735769709724.webp



عادة ما تستعمل دوال التشفير ال غير متماثل كالتالي :
دالة التشفير تأخذ مدخلين أحدهما المفتاح العام و الأخر المعلومة التي نريد تشفيرها
دالة فك التشفير تأخذ مدخلين أحدهما المفتاح الخاص و الأخر المعلومة التي نريد فك تشفيرها

الأن سندخل لشرح خوارزمية ال RSA :
ماذا تعني ال RSA :
1735821464743.webp


تم إختيار إسم من قبل مكتشفيه و هو أول حرف من أسماء عائلتهم كما هو موضح في الوثيقة التي نشروها.



فجأة رأيت أنه من الصواب شرح هذه الخوارزمية بإستخدام الوثيقة لذلك سأقوم بترجمة أجزاء منها و أشرحها.

لاحظت أنهم قاموا بشرح الطريقة بشكل عام ثم إنتقلوا إلى شرح السحر الكامن وراء ذلك.


1735822510943.webp

طرق التشفير وفك التشفير الخاصة بنا

لتشفير رسالة M باستخدام طريقتنا ومفتاح التشفير العام (e, n)، اتبع الخطوات التالية. (هنا e وn هما عددان صحيحان موجبان).

1. تمثيل الرسالة كعدد صحيح:
أولاً، قم بتمثيل الرسالة كعدد صحيح بين 0 وn - 1. (إذا كانت الرسالة طويلة، قسّمها إلى سلسلة من الكتل، وامثل كل كتلة كعدد صحيح). يمكن استخدام أي طريقة تمثيل قياسية. الغرض هنا ليس تشفير الرسالة ولكن فقط تحويلها إلى صيغة رقمية ضرورية للتشفير.

2. تشفير الرسالة:
قم بتشفير الرسالة برفعها إلى القوة e ثم أخذ الباقي عند القسمة على n. أي أن النتيجة (النص المشفر C) هي الباقي عند قسمة M^e على n:
كود:
C ≡ E(M) ≡ M^e (mod n)

3. فك تشفير النص المشفر:
لفك التشفير، قم برفع النص المشفر C إلى القوة d مرة أخرى مع أخذ الباقي عند القسمة على n:
كود:
D(C) ≡ C^d (mod n)

لاحظ أن التشفير لا يزيد حجم الرسالة؛ إذ إن كل من الرسالة والنص المشفر هما أعداد صحيحة في النطاق 0 إلى n - 1.


مفاتيح التشفير وفك التشفير
  • مفتاح التشفير العام هو الزوج (e, n) من الأعداد الصحيحة الموجبة.
  • مفتاح فك التشفير الخاص هو الزوج (d, n) من الأعداد الصحيحة الموجبة.

يجب أن يقوم كل مستخدم بجعل مفتاح التشفير العام الخاص به عامًا، مع الاحتفاظ بمفتاح فك التشفير الخاص به سريًا. (يجدر أن يتم ترقيم هذه الأعداد كما في n_A, e_A, d_A حيث إن لكل مستخدم مجموعته الخاصة، ولكننا سنكتفي بدراسة مجموعة نموذجية بدون ترقيم).

اختيار مفاتيح التشفير وفك التشفير
لإعداد مفاتيح التشفير وفك التشفير باستخدام طريقتنا:

1. حساب n:
قم بحساب n كحاصل ضرب عددين أوليين p وq:
كود:
n = p · q
يجب أن تكون p وq عددين أوليين كبيرين وعشوائيين. بالرغم من أن n سيكون عامًا، إلا أن العوامل p وq ستبقى مخفية بسبب صعوبة تحليل n إلى عوامله.


2. اختيار d:
اختر العدد d ليكون عددًا عشوائيًا كبيرًا ويكون أوليًا نسبيًا مع (p - 1) · (q - 1). تحقق من أن d يحقق:
كود:
gcd(d, (p - 1) · (q - 1)) = 1
حيث إن "gcd" تعني "القاسم المشترك الأكبر".

1735824227372.webp



حساب العدد e
يتم حساب العدد e باستخدام p , q , d ليكون "المعكوس الضربي" لـd بترديد ((p − 1) · (q − 1)). وبالتالي:
كود:
e · d ≡ 1 (mod (p − 1) · (q − 1))

نثبت في القسم التالي أن هذا يضمن أن المعادلتين (1) و(2) صالحتان، أي أن E وD هما عمليتان متعاكستان. يوضح القسم السابع كيفية تنفيذ كل من العمليات المذكورة أعلاه بكفاءة.


تمييز هذه الطريقة عن تقنيات أخرى
الطريقة المذكورة أعلاه لا يجب أن تُخلط مع تقنية "الأس" التي قدمها Diffie وHellman [1] لحل مشكلة توزيع المفاتيح.
  • تقنية Diffie وHellman تسمح لمستخدمين بتحديد مفتاح مشترك ليُستخدم في نظام تشفير تقليدي.
  • هذه التقنية لا تعتمد على خاصية "الباب السري" أو "التطابق أحادي الاتجاه".

دراسة Pohlig وHellman [8] تقدم مخططًا مشابهًا لطريقتنا، حيث يتم تنفيذ عملية الرفع إلى الأس بتردد عدد أولي.


فهم يقولون أنه
Markdown (بنكهة GitHub):
ليكن لديك عدد m تريد تشفيره
طبعا لديك المفتاح العام و هو (e, n )

نتيجة هذه المعادلة

C = m^e % n
هو التشفير
يعني c هو العدد المشغر


و لو كنت تريد فك التشفير و لديك المفتاح الخاص (d,n)
فنتيجة هذه المعادلة

m = c ^ d % n

هو النص الأصلي



الشروط هي :
n عدد موجب و هو حاصل جداء عددين أوليين كبيرين p و q .
e هو عدد أكبر من ثلاثة و أولي مع ϕ(n) و أصغر من n .
ϕ(n) هي دالة أولر تعطيك عدد لأعداد أولية ل n و أصغر منه.
بما أن e أولي مع ϕ(n) فهو يقبل عدد معاكس له بترديد ϕ(n) أي يوجد عدد d يحقق 1 + e*d = k*ϕ(n)


المفتاح العام هو : (e,n).
المفتاح الخاص هو :(d,n).

السحر الكامن وراء ذلك : إثبات أن m = c^d % n
كود:
إثبات أن c^d %n = m




لنضع


m' = c^d % n



نعرف أن


c = m^e % n



منه

m' = (m^e)^d % n


أي


m' = m^(e*d)%n


نعرف أن


e*d = k*ϕ(n) + 1

أي

m' = m^(k*ϕ(n) + 1 ) % n

m' = m*m^(k*ϕ(n)  ) % n

m' = m*(m^ϕ(n) )^k % n ------0

بإستخدام أحد مزايا دالة أولر و هي:

if gcd(m , p) = 1

m^ϕ(p)%p = 1-----1

و هي كذلك نحن نعرف أن p عدد أولي
فيوجد إحتمالين و هذا أحدهما
و نعرف أن
gcd(m ,q ) = 1
أي
m^ϕ(q)%q= 1------2
من 1 و 2 نجد أن
m^ϕ(n) % n =1
بالتعويض في 0 نجد
m' = m*1^k % n
أي
m' = m % n
أي أنها محققة



الأن لنبرمجهم بالبايثون
Python:
# نعرف أن
#c = m^e%n
def rsa_enc(m : int , e:int , n:int)->int:
    return m**e %n

#نعرف أن
#m = c ^d %n
def rsa_dec(c: int , d:int , n:int)->int:
    return c**d%n
#نحتاج دالة للتتأكد أن
#p,q
#هما أعداد أولية
def is_prime(p:int)->bool:
    for i in range(2 , int(p **1/2)):
        if(p%i == 0 ):
            return False
     
    return True


#يمكنك تجربة هذه القيم
# p = 61
# q = 53
# e = 17
# d = 2753
# m = 65

p = int(input("enter p value : "))
q = int(input("enter q value : "))
if(not is_prime(p) or not is_prime(q)):
    #جرب أن تدخل رقم غير أولي ل
    #p أو q
 
    print("you have to choose prime numbers.")
    exit()

n = p*q
e = int(input("enter e value : "))
# في حقيقة هنا يجب التأكد أن
# e,(p-1)(q-1)
#عدادن أوليان فيما بينهما
d = int(input("enter d value : "))
# كان يمكننا حساب
#d
# من خلال حساب معاكس ل
# e
#  بترديد
# n

m = int(input("enter the message that you want to cipher :"))
c = rsa_enc(m ,e,n)
print(f"the cipher is : {c}")
m = rsa_dec(c, d,n)
print(f"the plain text is : {m}")

هذا النص البرمجي قد لا يكون خاطئًا تمامًا، لكنه يمكن تحسينه ليصل إلى مستوى آخر. لذا سأعتبره خاطئًا في الوقت الحالي. هل سنقوم بتحسينه في مقالة قادمة؟ الله أعلم
إن شاء الله، سنشرح التشفير المتماثل، ودالة أويلر ϕ، وكيف يمكن باستخدام التشفير غير المتماثل إثبات هويتي
السلام عليكم و رحمة الله تعالى و بركاته.
 
التعديل الأخير بواسطة المشرف:
بارك الله فيك اخي وجزاك الله كل خير
شرح رائع وننتظر جديد ابداعاتك دائماً
تحياتي
 
  • Love
التفاعلات: ibada

آخر المشاركات

فانوس

رمضان
عودة
أعلى