الگوی امنیتی به کار گرفته شده در چیچک

21 04 2009

چیچک یک مشکل امنیتی داشت و اون این بود که گذرواژه‌‌های وب‌سایت‌های مختلف رو به صورت ناامن ذخیره می‌کرد. خب برای رفع این ضعف من مدتی روی الگوریتم‌های مختلف کار کردم تا در نهایت این مشکل رو حل کردم.

من از الگوریتم AES استفاده کردم. این توضیح رو بگم که AES یه الگوریتم رمزنگاری متقارنه به این معنی که داده‌ها به یک کلید رمزنگاری می‌شه و با همون کلید، رمز گشایی.

خب مشکل استفاده از این الگوریتم این بود که نمی‌شد به حافظه‌ی کاربر اعتماد کرد و کلید ۱۶ بایتی این الگوریتم رو به حافظه‌ی کاربر سپرد. خب راه حل بهتری (و البته نه غیر قابل نفوذ، مثل بقه‌ی الگوریتم‌های ایمن) که من استفاده کردم این بود که برای هر کامپایل از کاربر بخوام که کلید ذخیره شده توی سورس کد رو تغییر بده و برنامه رو کامپایل کنه. من هم برای نسخه‌ی باینری یک کلید رو وارد می‌کنم و اون رو پیش خودم نگه می‌دارم. خب، به نظر راه حل ایمنی بود، نه؟

اما جاوا نویس‌ها می‌تونن برای رمز نگاری کردن یک جریان داده‌ی ورودی به نام inputStream اینطور عمل کنن:

java.io.InputStream inputStream = ...
java.security.Key key = ...
javax.crypto.Cipher c =
javax.crypto.Cipher.getInstance("AES");
cipher.init(javax.crypto.Cipher.DECRYPT_MODE, key);
javax.crypto.CipherInputStream decryptingInputStream =
new javax.crypto.CipherInputStream(inputStream, cipher);

و برای رمز نگاری جریان داده‌ی خروجی به نام outputStram اینطور:

java.io.OutputStream outputStream = ...
java.security.Key key = ...
javax.crypto.Cipher c =
javax.crypto.Cipher.getInstance("AES");
cipher.init(javax.crypto.Cipher.ENCRYPT_MODE, key);
javax.crypto.CipherOutputStream encryptingOutputStream =
new javax.crypto.CipherOutputStream(outputStream, cipher);

و البته برای تولید کلیدی به نام key:

javax.crypto.KeyGenerator keygen =
javax.crypto.KeyGenerator.getInstance("AES");
java.security.SecureRandom random =
new java.security.SecureRandom();
keygen.init(random);
java.security.Key key = keygen.generateKey();


کارها

اطلاعات

یک پاسخ

2 05 2009
beyro

عليك سلام جناب! يادش بخير اون موقع ها كه فقط 2 ماهت بود از جوق آب گرفتمت بدش هم واسه اينكه يه سرپناهي بالا سرت باشه سپردمت به همين آقايي كه الآن بهش ميگي بابا! حالا كه واسه خودت مردي شدي:D بد نيس يه احوالي از رفيق قديميت بپرسي ها!

دیدگاه‌تان را بنویسید: