واحدة من الحقائق الرئيسية في التشفير هي أنه لا يجب عليك اختراع أي شيء في هذا المجال إذا لم تكن محترفًا. هذا صحيح جزئيًا ، لأنه تم اختراع أفضل ما تم منذ فترة طويلة ومعاناة واستخدامه لعقود في مجال تكنولوجيا المعلومات. الجانب الآخر من الحقيقة هو أن تطوير مجال معين من المعرفة يحدث فقط مع تدفق مستمر للأفكار الجديدة والحلول الأصلية فيه.
لأسباب واضحة ، لن نخدع عمالقة التشفير الصناعي مثل AES ، ولكن نتعمق في استطلاعات التشفير الخاصة بنا مع البلاك جاك والأفراح.
جزئيا لأنه مثير للاهتمام ، جزئيا لأنه عند نمذجة شيء خاص بك ومقارنته بالمعايير المعترف بها ، يمكنك أن ترى بوضوح التباين والحلول الفعالة والإغفالات الصريحة ، فأنت تفهم ما يمكنك السعي إليه لزيادة الكفاءة.
ولكن بالفعل الماء.
لنفترض أن تطبيق الويب الخاص بنا مكتوب بلغة php ، ويحتاج إلى تشفير قابل للعكس ، ونعتقد أنه يمكننا كتابة نظام التشفير الخاص بنا.
لذلك ، سنكتب نظامنا الخاص للتشفير القابل للعكس بمفتاح خاص وعام ، واحد سيحتوي على الميزات التالية لخوارزمية تشفير أكثر أمانًا قليلاً:
- وجود حروف ضوضاء في الشفرة الناتجة.
- سيتم تشفير المعلومات الموجودة في كل قناة من الوجهة المرسل باستخدام مفتاح خاص ، وستكون وظيفة المراسلة فريدة لكل مفتاح.
- ستتلقى كل رسالة رمزًا موجزًا - رمزًا فريدًا من وظائف المفتاح الخاص والرسالة الأصلية. هذا مطلوب من أجل تحقيق تفرد وظيفة المراسلة "حرف المصدر <=> الحرف المشفر" ليس فقط لقناة "المرسل الوجهة" ، ولكن أيضًا لكل رسالة فردية.
وهكذا ، حتى لو تصورنا أن مراسلات الرموز المشفرة والمشفرة لرسالة معينة أصبحت معروفة من خلال استخدام تحليل التشفير ، على سبيل المثال ، تحليل التردد ، فإن هذا لا يعطي أي تفضيلات عند فحص رسالة أخرى. - لتعقيد تحليل التردد ، سنقوم بتشفير كل رمز رسالة مصدر برمزي تشفير.
فماذا حدث.
في الواقع ، يمكنك رؤية النتيجة النهائية
هنافئة SymCoderتتضمن فئة SymCoder طرق التشفير وفك التشفير.
يتم إجراء التشفير بواسطة طريقة code () ، التي تتلقى الرسالة الأصلية عند الإدخال.
هنا ، تنشئ الرسالة على جدول المراسلات الذي تم إنشاؤه في tab_coded رسالة مشفرة ، مخففة حول الحواف وفي الداخل برموز ضوضاء.
بالمناسبة ، تكون رموز الضجيج فريدة لكل قناة وجهة المرسل ، حيث يتم إنشاؤها باستخدام مفتاح القناة ، ولكنها ليست فريدة في الرسائل. الأحرف المستخدمة للتشفير في code_symbols هي بعض علامات الترقيم والأحرف مثل٪ ، @ ، إلخ.
لكل حرف مشفر ، هناك حرفان من رمز_الشفرة لأسباب واضحة ، أن عددهما أقل بعدة مرات من الأحرف المشفرة.
يتم إنشاء جدول المطابقة create_tab_coded باستخدام ترجمة تجزئة مفتاح الرسالة إلى مصفوفة مع عدد العناصر يساوي عدد العناصر في مصفوفة رمز الرمز. يختلف دائمًا موضع بداية تجاوز الرموز المكونة من حرفين ويرتبط بمفتاح القناة. هذا يجعل من الممكن التأكد من أن الخوارزمية لتجاوز الأحرف المشفرة ومراسلاتهم مع أحرف الرموز ستكون دائمًا (جيدة ، أو مضمونة في كثير من الأحيان) مختلفة.
على سبيل المثال ، تبدو رسالة "hello world" التي يتم تشفيرها كما يلي:
Digest-a00bf11d-&?==&!&?.@.@=!=-.?&1.#&?=:.:.1%!&-%@&@%~&1^#=?%%.!%+.?.~=?..&?%&&:%~.#%@&1&1.#=?.#.?.!&1==&=.-=!
وها هي نفس الرسالة مشفرة مرة أخرى:
Digest-a00bf11d-=:.?=:&!.?.1&-=:=?.?.=.?.!&=%!=-%@=!%~.=^#.1%%.!%+=:.~.@..==%&&1%~.1%@=?.@.!&=.!&@=:&1.==:=!.1&:
يمكن ملاحظة أن خلاصة الرسالة نفسها هي نفسها ، لكن التشفير يصبح مختلفًا - تتم إضافة رموز الضوضاء عن طريق المطابقة التعسفية وبترتيب عشوائي لكل تشفير جديد.
تحتوي الرسائل على فائض ، ينخفض مع نمو حجم الرسالة ، ويصل إلى ضوضاء تصل إلى 10٪ (بالنسبة لأقصر الرسائل ، يصل التشويش إلى 90٪ وما فوق) ، والحد الأدنى لطول الرسالة المشفرة هو 116 حرفًا. أحد العيوب القليلة لطريقة التشفير هذه هي زيادة مضاعفة في الرسائل المشفرة.
فك الترميز هو ترجمة عكسية لصيغة "رمز الرمز" - الرمز الأصلي مع قطع الضوضاء من الرسالة. ماذا يمكن أن يكون المفتاح؟ من حيث المبدأ ، أي سلسلة فريدة لكل زوج من نوع الوجهة-المستلم.
على سبيل المثال ، إذا قمت بإنشاء برنامج مراسلة بتشفير الرسائل ، في هذه الحالة ، يمكن أن يكون أبسط إصدار من المفتاح الخاص هو md5 ($ user_id_1. $ Salt. $ User_id_2) ، فسيكون المفتاح فريدًا لكل قناة رسائل.