لماذا تغيير بت واحد في مفتاح الثلاثي أو القيمة الأولية لا تعطي بيانات مشفرة مختلفة؟

StackOverflow https://stackoverflow.com/questions/1284412

  •  18-09-2019
  •  | 
  •  

سؤال

أنا أستخدم pydes لتشفير بعض البيانات. كنت أرغب في إظهار أنه إذا قمت بتغيير القمادة واحدة في المفتاح أو القيمة الأولية، فستكون البيانات المشفرة مختلفة تماما. قمت بإعداد مفتاح 16 بايت لتغيير الحرف الأخير من قبل +/- 1، مما يؤدي إلى اختلاف قليلا على الأقل. ومع ذلك، حتى عندما أفعل ذلك، فإن 3 مثيلات مختلفة من البيانات المشفرة ليست مختلفة تماما.

from pyDes import *

data = 'Hello'

# CBC : Cipher-Block-Chaining
# \0..\1: arbitrary initial value for CBC
# pad=None: let pyDes take care of padding bytes
k1 = triple_des("16-byte-key-here", CBC, "\0\0\0\0\0\0\0\1", pad=None, padmode=PAD_PKCS5)
k2 = triple_des("16-byte-key-herf", CBC, "\0\0\0\0\0\0\0\1", pad=None, padmode=PAD_PKCS5)
k3 = triple_des("16-byte-key-herd", CBC, "\0\0\0\0\0\0\0\1", pad=None, padmode=PAD_PKCS5)

d1 = k1.encrypt(data)
d2 = k2.encrypt(data)
d3 = k3.encrypt(data)

assert d1 != d2
assert d2 != d3
assert d1 != d3

يبدو أن إحدى التأكيدات تفشل إذا قمت بتغيير صغير فقط في القيمة الرئيسية أو القيمة الأولية؛ لقد رأيت كلاهما d1 != d2 و d1 != d3 تفشل اعتمادا على ما أغيره. لقد حاولت أيضا تغيير 'Hello' ل 'Hello' * 50 للتأكد من أنه لم يكن مجرد حالة من بيانات الإدخال قصيرة للغاية.

إذا قمت بإجراء مفاتيح عشوائية تماما، فإن التأكيدات تمر. مع البرنامج كما هو موضح أعلاه، d1 != d3 فشل (هذه المفاتيح متباعدة قليلا؛ K1-K2 هي 2 بت مختلفة).

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

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


@ Kris Jester-Young كان لديه الإجابة التي تعد فيها بعض البتات في المفتاح بت التعادل. وكما اتضح، وفقا ل هذه المقالة:

لاحظ أنه على الرغم من أن مفتاح الإدخال ل DES هو 64 بت طويلة، فإن المفتاح الفعلي المستخدم من قبل DES هو فقط 56 بت في الطول. الأقل أهمية (اليمين اليمنى) في كل بايت هو بت متماثل، وينبغي تعيين حتى يكون هناك دائما عدد فردي من 1S في كل بايت. يتم تجاهل أجزاء التكافؤ هذه، لذلك يتم استخدام البتات الأكثر أهمية فقط من كل بايت، مما يؤدي إلى طول مفتاح 56 بت. هذا يعني أن القوة الرئيسية الفعالة ل Triple Des هي في الواقع 168 بت لأن كل مفتاح من المفاتيح الثلاثة يحتوي على 8 بت أساسي لا يتم استخدامه أثناء عملية التشفير.

(كان التركيز لي)

وكانت بيتس التماثل هذه بالضبط البتات التي كنت أتغير فيها في المثال.

شكرا كريس!

هل كانت مفيدة؟

المحلول

in des، بعض أجزاء المفتاح عبارة عن بتات التماثل، ولا تؤثر فعليا على التشفير / فك التشفير.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top