هش – رمزگذاری مبتنی بر رمز عبور جاوا اسکریپت نامتقارن

من می خواهم یک برنامه وب را که به 2 کاربر امکان می دهد پیام های رمز شده را به یکدیگر ارسال کنم، می خواهم، و من می خواهم به حداکثر رساندن امنیت، بنابراین من می خواهم مقدار اعتماد را که من در ارائه دهنده ابر من قرار داده (هر دو پایگاه داده و سرور که در آن کد برنامه است).

بنابراین، من تصمیم گرفتم سعی کنم یاد بگیرم که چگونه تمام طرف رمزگذاری / رمزگشایی را در جاوااسکریپت انجام دهم.

اما من مقالات مختلف را خوانده ام از سال 2013، 2011 و 2017 به شدت توصیه می شود هیچ کس هیچ کدام از رمزنگاری مربوط به JS را کد نکنید.

اگر فرض کنم که هشدار کارشناسان رمزنگاری درباره JS درست است، من این سؤالات را دارم:

  1. From به نظر من، Libsodium یک کتابخانه رمزنگاری بسیار محترم است، پس چرا آن یک نسخه جاوا اسکریپت را ارائه می دهد اگر JS ضعیف باشد؟ (و همچنین استنفورد، W3C و سیگنال است.)
  2. آیا امکان دارد برنامه ای مانند پیش بینی (رمزگذاری کامل از مشتری به سرویس گیرنده) را بدون نیاز به یادگیری برای کد کردن اندروید یا iOS توسعه دهم؟ (اگر نه، سپس چه رویکردی به هدف من نزدیک می شود؟ )

من همچنین راحتی را می خواهم: من می خواهم کاربران بتوانند از هر وسیله ای به وب سایت وارد شوند تا زمانی که آنها نیز بتوانند کد امنیتی چند عامل را از تلفن خود ارائه کنید.

(یعنی با استفاده از برنامه نمی تواند به محلی خاص ذخیره سازی برای یک دستگاه نیاز داشته باشد یا نیاز به آپلود فایل های کلید هایی که برای حفظ بیش از حد طولانی است؛ کاربران باید بتوانند فقط به سیستم وارد شوید با ارائه مدارک معتبر آنها را حفظ کرد.)

من امیدوارم کسی نوعی مرا در جهت درست اشاره کند، به جای این که فقط سئوالاتم را با عینک " اگر شما از درمورد امنیت سوال کنید، شما باید آن را به طرفداران ترک کند. " من می خواهم یاد بگیرم . با تشکر

آیا هنگام استفاده از یک فضای کلیدی یکسان نیاز به PBKDF2 با AES دارید؟

اگر یک مقدار تصادفی محرمانه 128 بیتی دارید (یا 192 یا 256 بیت برای AES-192 یا AES-256)، بله، می توانید آن را به عنوان کلید AES بدون اجرای آن از طریق یک تابع مشتق کلید استفاده کنید. [19659002] با این حال، مثال شما ارائه شده شامل تصادفی بایت نیست ، شامل (احتمالا) کاراکتر تصادفی از یک فضای مشخصی با حداقل 56 حرف و احتمالا خیلی بیشتر از آن. یک بایت واقعا تصادفی، یکی از 256 ارزش را با احتمال برابر دارد، در حالی که یک بایت در این راز یکی از 56 ارزش (ish) با امیدوار بودن احتمال برابر است.

همچنین 128، 192 یا 256 بیت نیست. این در واقع 128 بایت است ، که به من نشان می دهد که ممکن است کسی به اندازه اندازه کلید آنها احتیاج نداشته باشد و آن را اشتباه ساخته است.

اگر شما سعی کنید از مخفی به طور مستقیم به عنوان کلید استفاده کنید، احتمالا یکی از سه چیزها اتفاق می افتد:

  • این نرم افزار در حال حاضر خود اشتقاق کلید خود را (لزوما یک اشتباه کلید کلیدی مانند PBKDF2 نیست، اما برخی از نوع مشتق کلید). از آنجا که کلید (امیدوارم) به طور قابل توجهی بیش از 128 بیت آنتروپی باشد، این خوب است.
  • این نرم افزار به شما هشدار می دهد که کلید طول صحیح و شکست نباشد.
  • این نرم افزار کلید شما را به صحیح طول و استفاده از آن. این ممکن است بسیار بد در برخی موارد، اما متاسفانه اتفاق می افتد.

AES – چگونه می توانم اندازه کد را بدانم

بنابراین من یک کدهای AES پیدا کردم و آنها را کامپایل کردم، پس از آن از دستور ls -l برای دانستن اندازه آن استفاده کردم.
این ها اندازه های من هستند

  pi @ raspberrypi: ~ / iot_c1 / iot_c1 $ ls -l
 مجموع 1620
 -rwxr-xr-x 1 pi pi 20012 Apr 11 08:55 a.out
 -rw-r - r-- 1 pi pi 27967 Apr 11 08:11 iot_aes.c
 -rw-r - r-- 1 pi pi 4100 Apr 11 08:11 iot_aes.h
 -rw-r - r-- 1 pi pi 1540388 Apr 11 08:55 iot_aes.h.gch
 -rwxr-xr-x 1 pi pi 38560 Apr 11 08:11 test
 -rw-r - r-- 1 pi pi 6896 Apr 11 08:11 test2.c
 -rw-r - r-- 1 pi pi 6858 Apr 11 08:55 test.c

pi @ raspberrypi: ~ / iot_c3 $ ls -l
کل 124
-rw-r - r-- 1 pi pi 11283 آوریل 11 07:19 iot_aes.c
-rw-r - r-- 1 pi pi 1165 Apr 11 07:25 iot_aes.h
-rwxr-xr-x 1 pi pi 25080 آوریل 11 07:20 t128
-rwxr-xr-x 1 pi PI 25140 Apr 11 07:24 t192
-rwxr-xr-x 1 pi pi 25216 Apr 11 07:25 t256
-rw-r - r-- 1 pi pi 578 Apr 11 07:27 t256.txt
-rw-r-r-- 1 pi pi 14554 Apr 11 07:19 test3.c
  1. اندازه در بایت است؟ اگر چنین است برای دستگاه IOT بزرگ نیست؟
  2. من قرار است فقط اندازه کد را در نظر بگیرم تا کدام فایل به نظر من فایل C کد یا فایل کامپایل شده را بگیرد؟
  3. بین اندازه کد و اندازه دستگاه متفاوت است

رمزگذاری – فرمت متداول برای ارسال داده های رمز شده + نمک؟

برنامه ای دارم که از پرونده های مختلف از شخص ثالث دریافت می کند: MQTT، HTTP، AMQP، …
برخی از مشتریان نمی توانند از TLS استفاده کنند (دستگاه iot بدون پشتیبانی TLS)، بنابراین ما باید یک کامپایلر و راه آسان برای دریافت داده های رمز شده.

ایده من این است که از یک الگوریتم متقارن (AES256 یا مشابه) استفاده کنم، اما چگونه می توانم فرموله کنم چگونه داده ها ارسال شوند؟

همراه با داده های رمز شده، ما باید یک نمک و یک بروزرسانی اولیه . یک فرمت معمولی "container" وجود دارد که توضیح میدهد که چگونه باید بسته encryptedData + نمک + IV

، شاید با استفاده از ASN.1 و یا برخی از فرمت سریال سازی دیگر، اما اگر چیزی وجود دارد، آن را آسان تر برای توضیح به تمام توسعه دهندگان.

من میخواهم دادههایم را با کلید اشتراک AES رمزگذاری کنم

فرم من می خواهم که چندین فیلد را در فرم من رمز بگذارم تا رمز کلیدی مشترک AES رمزگذاری شود، لطفا به من کمک کنید

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

paymode:

این فرم اینجا است که من میخواهم رمزگذاری شود، چند زمینه که آن
شماره مرجع:
شناسه زیر فروشنده:
میزان
هیچ موبایل:
آدرس بازگشت:
مقدار اختیاری:
paymode: