التشفير بلغة بسيطة: نقوم بتحليل التشفير المتماثل وغير المتماثل باستخدام مخطط حرب النجوم كمثال (محدث)

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

صورة

بعد قراءة المادة ، سوف تتعلم النقاط التالية:

  1. ما هو التشفير ؛
  2. ما هو الفرق بين التشفير المتماثل وغير المتماثل؟
  3. في هذه الحالة ، يكون أكثر فعالية في استخدام التماثل ، وفي أي تشفير غير متماثل ؛
  4. ما هو تجزئة البيانات ولماذا يتم استخدامه في التشفير ؛

أهمية الموضوع ينمو باستمرار. منذ فترة طويلة لا يقتصر استخدام التشفير على تشفير المعلومات. بشكل أو بآخر ، نستخدم خوارزميات التشفير كل يوم عند زيارة المواقع عبر بروتوكول HTTPS ، أثناء إجراء عمليات الشراء باستخدام بطاقة ائتمان ، وعند الاتصال في برامج المراسلة الفورية. خلال السنوات القليلة الماضية ، جذبت تقنيات blockchain ، والتي تعتمد أيضًا على التشفير ، اهتمامًا واسعًا.

الغرض من هذه المقالة هو تقديم القارئ إلى خوارزميات التشفير الأساسية. عند كتابة مقال ، حاولت إيلاء أكبر قدر ممكن من الاهتمام لمسألة التطبيق العملي. للبرمجة ، تم استخدام Python 3.6. عند كتابة التعليمات البرمجية ، حاولت تقسيمها إلى أجزاء منفصلة والتعليق على جميع النقاط الرئيسية.

في هذه المقالة ، لم أقم بتحليل التوقيع الرقمي ، لكن بعد فهم التشفير غير المتماثل ، سوف يصبح معنى هذه التقنية واضحًا.

قصة


دعنا نسافر عقلياً إلى عالم حرب النجوم قبل أحداث الحلقة 6 ، عندما تصبح قوات المقاومة على علم ببدء بناء نجمة الموت الجديدة. يخطط الأمر لإدخال مجموعة استخباراتية تحت ستار البنائين. العملية خطيرة للغاية ، والتواصل مع المقر سيكون صعبًا. في حالة حدوث حالة طوارئ ، يمكن لكل عضو في المجموعة إرسال واستقبال الرسائل من المقر الرئيسي بتردد غير محمي.

الغرض من مجموعة الاستطلاع هو أي بيانات يمكن أن تلقي الضوء على التكوين والأسلحة والغرض من محطة المستقبل. لتخزين البيانات ، من المخطط تطوير معدات وبرامج خاصة.

وافق المقر على خيارين لهذه العملية:

الخطة (أ) - إعادة العملاء مع قوات المتمردين ؛
الخطة ب - النقل عن بعد للخطط من نجمة الموت نفسها باستخدام معدات المحطة. سيكون نقل المعلومات سريعًا ، ولكن بعد عملية النقل ، من المرجح أن يتم حساب الوكيل وإمساكه.

مخطط
صورة

أنت مبرمج في فريق مسؤول عن تطوير البرمجيات.

عند التخطيط لعملية ما ، يتم النظر في العديد من السيناريوهات السلبية المحتملة:

  • العدو سوف يعترض الإشارة ، ويفهم محتوياتها حول التخطيط للهجوم ، ويقود الجسم أقرب إلى القوات الموالية للإمبراطورية. في هذه الحالة ، ستكون الخسائر بين المقاومة أعلى ؛
  • سيتم القبض على أحد الجواسيس وسيكشف خلال الاستجواب عن خطة التشغيل ، والتي قد تؤدي إلى تسوية مفاتيح التشفير (سنتحدث عنها أدناه) ؛
  • يمكن اعتراض جاسوس مع البيانات التي تم تنزيلها من قبل القوات الإمبريالية ، والتي من شأنها إجراء تغييرات على المحتويات ، وتضليل المقاومة حول نقاط الضعف في المحطة. في هذه الحالة ، خلال الهجوم ، سيتم إرسال أسطول المتمردين في اتجاه خاطئ وتدميرها تدريجيا.

من هذه السيناريوهات ، تتم صياغة المهام:

  1. يجب تشفير المحتوى بشكل آمن وحمايته من التغييرات ؛
  2. في حالة فقدان مفاتيح التشفير أو التسوية ، يجب أن يكون من الممكن الحصول على مفاتيح تشفير جديدة عن بعد على تردد يمكن استغلاله من قبل الخصم.

تشفير المعلومات


دعنا نحل مشكلة تشفير المعلومات:

يستخدم مفتاح التشفير لتشفير المعلومات وفك تشفيرها. هذا هو المفتاح الذي يجعل التشفير عكسها. سيتم تزويد كل وكيل بمفتاح تشفير. بعد تنزيل البيانات ، سيقوم الوكيل بتشفيرها وإرسالها إلى مقر المقاومة.

وصف مبدأ التشفير
تسمى الطريقة التي يتم بها تشفير الرسالة وفك تشفيرها باستخدام مفتاح واحد تشفير متماثل .

صورة

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

يستخدم التشفير غير المتماثل مفتاحين متصلين ببعضهما: عام وخاص.

صورة

آلية العمل هي كما يلي:

  1. المرسل إليه يرسل مفتاح فتح إلى المرسل ؛
  2. يرسل المرسل الرسالة باستخدام المفتاح العمومي المستلم. في الوقت نفسه ، يمكن الآن فك تشفير الرسالة فقط باستخدام المفتاح الخاص ؛
  3. عند استلام الرسالة المشفرة ، يقوم المستلم بفك تشفيرها باستخدام المفتاح مغلق (والذي تم إنشاؤه بالترادف مع الجمهور).


دعنا نبدأ في البرمجة! لتطوير البرنامج الضروري ، سوف نستخدم مكتبة Python المسماة pycrypto . لديها وثائق ممتازة وتقدم جميع خوارزميات التشفير الشائعة.

أولاً ، سنقوم بتطوير ميزة للتشفير المتماثل تسمى Advanced Encryption Standard (AES) . إنها واحدة من خوارزميات التشفير الأكثر شيوعًا.

from Crypto.Cipher import AES #   from Crypto.Hash import SHA256 #        SHA. from Crypto.Hash import MD5 #            32  from Crypto import Random def transform_password(password_str): """Transform the password string into 32 bit MD5 hash :param password_str: <str> password in plain text; :return: <str> Transformed password fixed length """ h = MD5.new() h.update(key.encode()) return h.hexdigest() def symmetric_encrypt(message, key, verbose = True): """Encripts the message using symmetric AES algorythm. :param message: <str> Message for encryption; :param key: <object> symmetric key; :return: <object> Message encrypted with key """ key_MD5 = transform_password(key) #      32  message_hash = SHA256.new(message.encode()) message_with_hash = message.encode() + message_hash.hexdigest().encode() #     .      iv = Random.new().read(AES.block_size) cipher = AES.new(key_MD5, AES.MODE_CFB, iv) #     . AES.MODE_CFB -   ,      iv. https://www.dlitz.net/software/pycrypto/api/current/Crypto.Cipher.blockalgo-module.html#MODE_CFB encrypted_message = iv + cipher.encrypt(message_with_hash) #       .  ,       ,       . if verbose: print(f'Message was encrypted into: {encrypted_message.hex()}') return encrypted_message def symmetric_decrypt(encr_message, key): """Decripts the message using private_key and check it's hash :param encrypted_message: <object> Encrypted message :param key: <object> symmetric key; :return: <object> Message decripted with key """ key_MD5 = transform_password(key) #   ,      bsize = AES.block_size dsize = SHA256.digest_size*2 iv = Random.new().read(bsize) cipher = AES.new(key_MD5, AES.MODE_CFB, iv) decrypted_message_with_hesh = cipher.decrypt(encr_message)[bsize:] #     ,      decrypted_message = decrypted_message_with_hesh[:-dsize] #   ,      digest = SHA256.new(decrypted_message).hexdigest() #    .     ,     . if digest==decrypted_message_with_hesh[-dsize:].decode(): #      ,      ,   print(f"Success!\nEncrypted hash is {decrypted_message_with_hesh[-dsize:].decode()}\nDecrypted hash is {digest}") return decrypted_message.decode() else: print(f"Encryption was not correct: the hash of decripted message doesn't match with encrypted hash\nEncrypted hash is {decrypted_message_with_hesh[-dsize:]}\nDecrypted hash is {digest}") 

دعونا نتحقق من أداء الكود باستخدام مثال
 message = """  120   120  / 120   10     30-5 (2)    4.0 """ key = 'Traveling through hyperspace ain't like dusting crops, farm boy.' encr_message = symmetric_encrypt(message, key, verbose = True) print('\n') print('DECRIPTION') decr_message = symmetric_decrypt(encr_message, key) print(decr_message) 

 Message was encrypted into: ed10e4c65358bb9e351c801c3b3200b21fa86a24021c317bb5c9d8b3f76bdf9f3a7d26781a22402f0e4f41ca831b6d2da9e1e6878c34c79ddc7959af3ae9fc2ba0cfff1c0180a7e0f637f1aa5b24507d552d5dfe7625e7b81d817b5882b2b19bb95f3988a03c78f850098dfc8e6089863deaa39b887eaea4c1d4ba006edaec90205d54b27ed4ac70ed75cdd01732e1176bf04218beb8ae742ff708a201a9d1cb57dd5f2e70dc3239208d23705f7a3aae3e315c4df6d73c871b66c4995cce5f19738f731cd58755d21ed92612c44197f875cddf3f7aa1d60e435ce1492679b9d60c4b8538f52408f321711ac1d2daa6dbbc33dc655abca10e2f5fd3ff27823995b9dcdb62c0bafc1963ab539ccb466f1c140479df34b0005f578f72fcdd76b17391332037b801f74f733a08 DECRIPTION Success! Encrypted hash is b0dbb35b28fbff258350a50c39282b73e31f408c9da937c81d8d48115b491026 Decrypted hash is b0dbb35b28fbff258350a50c39282b73e31f408c9da937c81d8d48115b491026  120   120  / 120   10     30-5 (2)    4.0 


كما ترون ، نجحنا في تشفير الرسالة باستخدام المفتاح العمومي.
قم بتشغيل الكود عدة مرات. سترى أنه في كل مرة يتغير الجزء المشفر. هذا لأنه عند التشفير ، استخدمنا وضع التغذية المرتدة للشفرة (AES.MODECFB) ، حيث يتم خلط كتل النص غير المعتاد مع كتل النص المشفر. الرابع - ناقلات التهيئة (اقرأ المزيد عن الوضع هنا ). عند فك تشفير الرسالة ، نرى أن تجزئة الرسالة التي تم فك تشفيرها يطابق التجزئة التي أضفناها أثناء التشفير. وهذا يعني أن فك التشفير كان صحيحا.

ما هو التجزئة
تجزئة المستند هي مجرد سلسلة من الأحرف الفريدة لأي مجموعة بيانات. مع أي تغيير في البيانات ، يتغير التجزئة كثيرًا. بمعنى آخر ، فإن التجزئة هي نوع من "البصمة" لأي مجموعة بيانات.



ولكن ماذا لو تم اختراق مفاتيح التشفير لسبب ما؟ ثم يمكن لأي شخص فك تشفير المعلومات.

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

في الوقت نفسه ، فيما يتعلق بمهمتنا ، هناك تشفير بسيط - التشفير غير المتناظر مناسب للبيانات الصغيرة ، على سبيل المثال ، الرسائل القصيرة. يمكننا فقط تخمين مقدار البيانات التي حصلت عليها المخابرات. بالطبع ، يمكننا تقسيم جميع البيانات المستلمة إلى أجزاء صغيرة وترميز كل منها بمفتاح خاص ، ولكن هناك حل أفضل. (يتم حل المشكلة هنا ).

قرار

لاحظ المستخدم Akela_wolf بحق أنه يمكن لأي شخص إنشاء المفتاح العمومي وإرساله. لقد قمت ببعض التعديلات على الخطة.

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






قرار قديم
  1. سيقوم العميل بإنشاء زوج رئيسي (عام وخاص) في مكانه ، ثم يرسل المفتاح العام إلى قوات المتمردين ؛
  2. في مقر المقاومة ، سيقومون بإنشاء مفتاح جديد لتشفير SYMMETRIC ؛
  3. يتم تشفير المفتاح المتماثل باستخدام المفتاح العمومي الذي أرسله العامل ؛
  4. سيتم إرسال المفتاح المتماثل المشفر إلى الوكيل الذي سيقوم بفك تشفيره باستخدام المفتاح الخاص.

انتبه إلى برنامجنا على القناة المفتوحة:

  1. يرسل الوكيل مفتاح OPEN من الزوج ، ويكون المفتاح مغلق في حوزته ؛
  2. يرسل مقر المقاومة مفتاح تشفير متماثل ، مشفر بالمفتاح العمومي المرسل من الوكيل.


لا الرسالة الأولى أو الثانية من أي قيمة في الاعتراض.


دعنا نكتب الكود:

 #          RSA. #        SHA256 from Crypto.PublicKey import RSA #      def generate_keys(bits = 2048): """Generates the pair of private and public keys. :param bits: <int> Key length, or size (in bits) of the RSA modulus (default 2048) :return: <object> private_key, <object> public_key """ private_key = RSA.generate(bits) public_key = private_key.publickey() return private_key, public_key private_key, public_key = generate_keys(bits = 2048) 

دعونا نرى كيف تبدو المفاتيح.
 print(private_key.exportKey(format='PEM').decode()) print('\n') print('#'*65) print('\n') print(public_key.exportKey(format='PEM').decode()) 

-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA4JDLu7Vtvg2yqbH6Y0eJPfoEsOlKzgmOodqhA1CqkEG4OpKi
sGW7ciGP4v37GE6edHBCEy4UNkVQtnpPBjzTHvKd1pO70B84vD5OSrS7uNw2EYkj
d/ZwhrJMrcQKRwPkkM4OiewaaAaK0vPWJIKwlW61DY9X7LfNz7aOKMTbKnm1vdR0
919AV98FUmNoQBgka6nXFGmNbi7D43MtLwxBZIXfFupEiANSvOs+57hgaCho7OWM
GUOjLkG6HBscPhJ2W1H5DU9GjwL24ynTvKifgo1/2ue61MV1Pzh5CVaicJKNaRtg
Pd99gFhBGINsXV2X6Jh/W5nNsCddU4EI0AlO8wIDAQABAoIBAARM4YnjrIlSK9Sy
EtBp40frjMFyhjsx1ahlzmWI2utORt/gRPtJx3AlEmNPZ8qMXt5t8+X4IOz1INmN
uAuviH90N++O/q66mlSIgOlPUrT0ipiFXseCUZ9StMMzGNtJSMw5FfAwNEU/stLd
VoF2ezkxWIg88XsX/fn3Tfub4XKLvu4raJGcJ+Fo2GI9hYEGKnHhSuHvDHekTLlQ
z46O+cIwtehbFGcKesyK3zDD1uP5YLPIWpiqt1TgKjJzRF0l4ZJLk+RT7kU2pGIQ
mosOnr+06WyMIg724yQyAIwtS9X0czKBGUESrtTTb1HCXLeTwnncOTxh6q2z42LF
tn34+DECgYEA6EEp4oTvjfTQfUQPMByuAjF1hpdFHQqRymygiFgoF+Mg3QmL0w8j
/84H/q7s8FSx+3th8MK87bFq4lrry+h/mYwmvF5zZbhxcnl2uaX+KUPgpT6TgvAo
WOv2wc4BSaoo9DrxrZId86vpO2qbopw6gkBsvw47HSoQ+FSqXtZ0p8kCgYEA94Zj
b1ulctUjybiszO93TAjkzx3lU3yL+B1eZiQXtJa3mgG+ka1R/uMfr0NlT+Jzo0My
wHV30YRJDxziCrDol9OgSSU0sXwEcUxUIBLBwXLCp1EmMsYG9PB/x4OTWve35a8F
O+rMxuvWaZeIOfVCfL8UEcWweYaVdWIonJN+ltsCgYEAjeSZ2UlMLZce9RjqioNL
EA31dlfeoqJ9dYUuAn6RaB6cSk51vWlnnfXazo9CNIYaAsFbkcL3t+QHn+jaXEZc
BowocjbmG4Q20zBAB6XRBJbynSIA7yMYE1N9+uOHx+CMisGkO12krOUfZex4zzzR
RhhkF8ly9htoKL9ZIv20YXkCgYBzH3UF6PkVZJ5lhtgP5Nx2Z7iLwBrV7ppnBrnO
BcFkw6iXH3KT7KmzQ82LxWvMcMVZzLpBGyFkOAOG3OchE9DKNKpa+sv8NHMYguip
li+5mneAPFTozoOTznuPvtl9OLO2RuXHTVh6uFub9tdsJW8L+A8MiQagLwE6fDHp
SQxaewKBgQDIyzL1THpW3+AMNrOZuI/d3Em5wpGJiZbDSBRosvsfGm/sHaz4Ik5E
nWnftgktmsAD60eORTTh9/ww/nm7f3q9kzT8Sv1MmqeRXq9VFIOeP/+8SSE/7LzD
izlb5xEtVD8LuY54jHyiOxiZC++TQswMnOKKi0Gx26MDoO7Tx9akVw==
-----END RSA PRIVATE KEY-----

#################################################################

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4JDLu7Vtvg2yqbH6Y0eJ
PfoEsOlKzgmOodqhA1CqkEG4OpKisGW7ciGP4v37GE6edHBCEy4UNkVQtnpPBjzT
HvKd1pO70B84vD5OSrS7uNw2EYkjd/ZwhrJMrcQKRwPkkM4OiewaaAaK0vPWJIKw
lW61DY9X7LfNz7aOKMTbKnm1vdR0919AV98FUmNoQBgka6nXFGmNbi7D43MtLwxB
ZIXfFupEiANSvOs+57hgaCho7OWMGUOjLkG6HBscPhJ2W1H5DU9GjwL24ynTvKif
go1/2ue61MV1Pzh5CVaicJKNaRtgPd99gFhBGINsXV2X6Jh/W5nNsCddU4EI0AlO
8wIDAQAB
-----END PUBLIC KEY-----

كما ترون ، فإن مفاتيح التشفير غير المتماثلة هي سلاسل طويلة من الحروف يتم إنشاؤها رياضيا.

لذلك ، أنشأنا المفاتيح. الآن لنكتب وظيفة لتشفير البيانات:

 from Crypto.PublicKey import RSA #        RSA. from Crypto.Hash import SHA256 #        SHA256.    #       from Crypto.Cipher import PKCS1_OAEP #   def encrypt_message(message, public_key, verbose = True): """Encripts the message using public_key. :param message: <str> Message for encryption :param public_key: <object> public_key :param verbose: <bool> Print description; :return: <object> Message encrypted with public_key """ message_hash = SHA256.new(message.encode()) #   . cipher = PKCS1_OAEP.new(public_key) message_with_hash = message.encode() + message_hash.hexdigest().encode() #      ,          encrypted_message = cipher.encrypt(message_with_hash) if verbose: print(f'Message: {message} was encrypted to\n{encrypted_message.hex()}') return encrypted_message def decrypt_message(encrypted_message, private_key): """Decripts the message using private_key and check it's hash :param encrypted_message: <object> Encrypted message :param private_key: <object> private_key :return: <object> Message decripted with private_key """ dsize = SHA256.digest_size*2 cipher = PKCS1_OAEP.new(private_key) decrypted_message_with_hesh = cipher.decrypt(encrypted_message) #   (  ) decrypted_message = decrypted_message_with_hesh[:-dsize] #      digest = SHA256.new(decrypted_message).hexdigest() #     if digest==decrypted_message_with_hesh[-dsize:].decode(): #      ,      ,   print(f"Success!\nEncrypted hash is {decrypted_message_with_hesh[-dsize:].decode()}\nDecrypted hash is {digest}") return decrypted_message.decode() else: print(f"Encryption was not correct: the hash of decripted message doesn't match with encrypted hash\nEncrypted hash is {decrypted_message_with_hesh[-dsize:]}\nDecrypted hash is {digest}") 

خطوات سير العمل
  1. يولد الوكيل زوجًا رئيسيًا:
     private_key, public_key = generate_keys() 

  2. يرسل مفتاح فتح إلى المقر ؛
  3. في المقر الرئيسي ، باستخدام المفتاح العمومي ، قم بترميز المفتاح للتشفير المتماثل:
     new_symmetric_key = 'SOME_KEY_asdfasdfasdfasdfsdfgrtwhetynt' encr_msg = encrypt_message(new_symmetric_key, public_key) 

    استنتاج
    Message: SOME_KEY_asdfasdfasdfasdfsdfgrtwhetynt was encrypted to
    41e940507c96397e3feb4a53390c982633bb1775a52957996a8069bd22063086a0e831bf775a17909276aba0d0478ee6c953837c8ea5d20d40e1c8eb463aaa1bc5c93c71677b1a85e90439c9dbda8a98ce168acb38368155437c66815b84aa2fbdda0eb909e4e6079b4410c720eddd955ed048193bf87f8f9976a17ee32a58a71dfddf3db116343d949d29c25f72c511a440a50a5d4f1e01c37b24a1cb4127e191d3231328b2f120c7dbd0cb5bf19823f0978b8ed17d25952de4b146ef9724fff359eb2af503fdfd72b91525a5503b076ba9aaaeac55af3f8d210c12d579d45dd70362123c0b4b36ef9c2f7705e6f884a25553eb0e11e5077f11fa986d0ff280


  4. يتم إرسال هذا التسلسل الطويل مرة أخرى إلى الوكيل.
  5. يقوم الوكيل بفك تشفير الرسالة المستلمة باستخدام المفتاح الخاص:
     recieved_symmetric_key = decrypt_message(encr_msg, private_key) print('\n') print(f"New symmetric key is: {recieved_symmetric_key}") 

    استنتاج
     Success! Encrypted hash is 42ad66445a05ac09e684bb21f9b487d95b9cfa11d02e0b459931321ee02f7c1c Decrypted hash is 42ad66445a05ac09e684bb21f9b487d95b9cfa11d02e0b459931321ee02f7c1c New symmetric key is: SOME_KEY_asdfasdfasdfasdfsdfgrtwhetynt 


  6. ثم ، باستخدام مفتاح متماثل جديد ، يقوم الوكيل بتشفير البيانات المستلمة:

     message = """  120   120  / 120   10     30-5 (2)    4.0 """ encr_message = symmetric_encrypt(message, recieved_symmetric_key, verbose = True) 

    استنتاج
     Message was encrypted into: 


  7. مقر تشفير:
     print('DECRIPTION') decr_message = symmetric_decrypt(encr_message, new_symmetric_key) print(decr_message) 

    استنتاج
     DECRIPTION Success! Encrypted hash is b0dbb35b28fbff258350a50c39282b73e31f408c9da937c81d8d48115b491026 Decrypted hash is b0dbb35b28fbff258350a50c39282b73e31f408c9da937c81d8d48115b491026  120   120  / 120   10     30-5 (2)    4.0 




فويلا!

في هذا المثال التجريدي ، رأينا عمل خوارزميات التشفير الشائعة. يتم استخدام التشفير غير المتماثل وغير المتماثل ، وكذلك التجزئة ، في عمل الويب والتوقيع الإلكتروني و blockchain والعملات المشفرة . آمل أن تكون المادة مفيدة لفهم تشغيل هذه التقنيات.

خاتمة


ونتيجة لذلك ، تمكنت المخابرات المتمردة من الحصول على معلومات دقيقة حول مدى ضعف المحطة والطريق إليها ، ووجود الإمبراطور للتفتيش ، ووجود درع طاقة ومصدره في موقع Endor. رصدت الإمبراطورية الجواسيس ، أساءت فهمهم حول القدرة القتالية للمحطة. تم تعيين المحطة أيضًا إلى قمر إندور ، حيث كان محميًا بواسطة درع.

لكننا نعرف كيف انتهى كل شيء ؛)

Source: https://habr.com/ru/post/ar452042/


All Articles