hadi mirzaie
hadi mirzaie
خواندن ۲ دقیقه·۱ سال پیش

رمزنگاری هیبرید در برنامه نویسی (hybrid cryptosystem)

رمزنگاری هیبرید به گونه ای از رمزنگاری دو مرحله ای گفته می شود که با استفاده از یک جفت کلید ثابت و کلیدهای متغیر، دست به رمزنگاری و رمزگشایی می زند. روش انجامش چندان سخت نیست و موارد استفاده ش بسیاره. یکی از موارد استفاده این نوع رمزنگاری، استفاده در اپ های pwa هست. این اپ ها جهت افزایش امنیت، داده های ورودی اپ رو جهت لاگین، دریافت میکنند، رمزنگاری می شوند و به سمت سرور فرستاده می شود، در سمت سرور رمزگشایی می شود.

تلاش میکنم مرحله به مرحله توضیحش بدم تا مبحث به خوبی براتون روشن بشه و دیگه نیازی به توضیحات طولانی گنگ و مبهم نباشه.

تصور کنید یک صفحه لاگین دارید شامل شماره تلفن و رمزعبور. این موراد ابتدا دریافت می شود و در کنار همدیگر به شکل string قرار میگیرند:

"989123457675MyPassword"

حالا ما باید چنین ترکیبی رو رمزنگاری کنیم بفرستیمش سمت سرور. در رمزنگاری هایبرید، ما در دو مرحله رمزنگاری میکنیم، مرحله اول استفاده از public key هست. یعنی چی؟ یعنی با استفاده از یک کلید هش شده عمومی، یک کلید متقارن رندوم رو رمزنگاری میکنیم. یک مثال از php میزنم براتون:

$private_key = openssl_pkey_new(); openssl_pkey_export($private_key, $private_key_pem); $public_key_details = openssl_pkey_get_details($private_key); $public_key_pem = $public_key_details['key']; $public_key = openssl_pkey_get_public($public_key_pem); $symKey = random_bytes(16); openssl_public_encrypt($symKey, $encryptedSymKey, $public_key); return base64_encode($encryptedSymKey);

خب توی کد بالا ما اومدیم چکار کردیم؟ اومدیم ابتدا کلید خصوصی مون رو ساختیم، بر مبنای اون کلید خصوصی، به کلید عمومی دسترسی پیدا کردیم. سپس یک کلید متقارن (symmetric key) 16 بایتی رندوم رو ایجاد کردیم. با استفاده از کلید عمومی مون، کلید سیمتریک رو رمزنگاری کردیم.
حالا در ادامه باید اطلاعات فرم لاگین رو رمزنگاری کنیم بفرستیمش سمت سرور:

$data = '989123457675MyPassword' $hybCrypto = openssl_encrypt($data, 'aes-128-ecb', $encryptedSymKey, 0);

از کلید سیمتریک رمزنگاری شده باید اینجا به عنوان کلید جدید استفاده کنیم تا داده ها فرم لاگین ما رمزنگاری بشه.

این روند در دو مرحله صورت گرفت:

  1. رمزنگاری کلید رندوم 16 بایتی سیمتریک با استفاده از کلید عمومی
  2. رمزنگاری داده های لاگین با استفاده از کلید جدید

حالا اگر بخواهیم همین فرایند را رمزگشایی کنیم، با استفاده از کلید خصوصی، ابتدا باید کلید سیمتریک را رمزگشایی کنیم و سپس با استفاده از کلید رمزگشایی شده، به رمزگشایی داده های لاگین دست بزنیم. ما قبلا با استفاده از این قطعه کد openssl_pkey_export($private_key, $private_key_pem) ، کلید خصوصی را منتشر کردیم، شما میتوانید آن را در یک فایل ذخیره کنید جهت استفاده در موارد بعد.

مثال از رمزگشایی داده های لاگین:

openssl_private_decrypt($encryptedSymKey, $decryptedSymKey, $private_key); $decrypted = openssl_decrypt($hybCrypto, 'aes-128-ecb', $decryptedSymKey, 0); return $decrypted;

حالا شما باید بتوانید به مقادیر رمزگشایی شده لاگین دسترسی پیدا کنید.

با استفاده از این الگوریتم، شما انعطاف بیشتری در رمزنگاری دارید و سطح امنیت داده های شما نسبت به حالت عادی رمزنگاری بالاتر می رود.

اگر نکته ای به نظرتون رسید حتما برام کامنت کنید ^__^

cryptographyphp
مسترربیت هستم برنامه نویس، طراح سایت، علاقه مند به بلاک چین ... میخونم و گاهی مینویسم و شاید سخت ترین کار دنیا رو هم گاهی انجام بدم ... می اندیشم !!!!
شاید از این پست‌ها خوشتان بیاید