سؤال

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

التطبيق مكتوب بلغة C#، لكننا نريد أن يتمكن عملاء الطرف الثالث من التكامل معه بسهولة.نجد أن معظم العملاء يستخدمون PHP أو Classic ASP أو VB.Net.

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

ما هي المجموعات الأكثر توافقًا من خوارزمية التشفير ووضع الحشو والخيارات الأخرى؟

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

المحلول

بافتراض أن لديك طريقة آمنة لمشاركة المفتاح (سواء تشفير RSA له، أو استرجاعه عبر رابط SSH أو HTTPS، أو الاتصال بالمطور الآخر على خط هاتف آمن)، فإن أيًا من التشفيرات الحديثة الرئيسية (مثل AES، كما ذكرنا سابقًا) بواسطةEd Haber) سيكون مناسبًا.أود أن أؤيد اقتراحه بشأن AES.يجب أن تكون هناك مكتبات لـ PHP، VB، Ruby، وما إلى ذلك.

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

نصائح أخرى

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

إذا كنت لا تهتم إذا كان بإمكان الطرف الثالث فك تشفير البيانات، فإن AES هو الحل الأمثل.سيكون لديك مفتاح واحد تشاركه مع الجهات الخارجية.يُستخدم هذا المفتاح للتشفير وفك التشفير.

سأستخدم AES لتشفير البيانات المجمعة وRSA لتشفير مفتاح AES.إذا كانت البيانات صغيرة بما يكفي، فما عليك سوى تشفير كل شيء باستخدام RSA.

قال إد هابر

أود استخدام AES لتشفير البيانات بالجملة و RSA لتشفير مفتاح AES.إذا كانت البيانات صغيرة بما يكفي ، فما عليك سوى تشفير كل شيء باستخدام RSA.

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

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

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

إليك مثال PHP:

function XOREncryption($InputString, $KeyPhrase){

    $KeyPhraseLength = strlen($KeyPhrase);

    for ($i = 0; $i < strlen($InputString); $i++){

        $rPos = $i % $KeyPhraseLength;

        $r = ord($InputString[$i]) ^ ord($KeyPhrase[$rPos]);

        $InputString[$i] = chr($r);
    }

    return $InputString;
}

يتمتع ColdFusion بوظائف التشفير وفك التشفير القادرة على التعامل مع مجموعة من الخوارزميات والترميزات، بما في ذلك AES الموصى بها أعلاه.

المعلومات على: http://www.cfquickdocs.com/cf8/?getDoc=encrypt#Encrypt

رمز المثال السريع:

Key = generateSecretKey( 'AES' , 128 )

EncryptedText = encrypt( Text , Key , 'AES' , 'Hex' )

Text = decrypt( EncryptedText , Key, 'AES' , 'Hex' )

تتوفر وظائف مماثلة مع هذه المكتبة لـ بي أتش بي:
http://www.chilkatsoft.com/p/php_aes.asp

...وجافا، بايثون، روبي، وغيرها...
http://www.example-code.com/java/crypt2_aes_matchPhp.asp
http://www.example-code.com/python/aes_stringEncryption.asp

يبدو أن RSA هي الخوارزمية المناسبة لك.

لماذا لا يتم كشف خادمك عبر HTTPS؟وبهذه الطريقة، يمكن لأي عميل يمكنه التعامل مع HTTPS أن يستهلك الخدمة بشكل آمن.

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