نگاهی تازه به رمزگذاری مبتنی بر عملکرد
- ۲۶ آوریل ۲۰۲۵
- واسیلیس ورینوتیس
- . بدون نظر

رمزنگاری اغلب مانند یک هنر تاریک باستانی به نظر می رسد، پر از مفاهیم سنگین ریاضی، اندازه کلیدهای سفت و سخت و پروتکل های سختگیرانه. اما اگر بتوانید ایده یک “کلید” را کاملاً تجدید نظر کنید چه؟ چه میشد اگر کلید تکهای بیحرکت نبود، بلکه یک حباب زنده و نفسگیر بود؟ تابع?
VernamVeil یک رمزگذاری تجربی است که همین ایده را بررسی می کند. این نام ادای احترام به گیلبرت ورنام، یکی از ذهنهای پشت تئوری پد یکبار مصرف است. VernamVeil با پایتون خالص (با وابستگی اختیاری به Numpy برای برداری) نوشته شده است، برای توسعه دهندگانی که کنجکاو در مورد کارهای درونی رمزنگاری هستند، طراحی شده است، و فضایی سرگرم کننده و آموزشی برای ایجاد شهود در مورد رمزنگاری فراهم می کند. الگوریتم اصلی حدود ۲۰۰ خط کد پایتون (به استثنای اسناد، نظرات و خطوط خالی) بدون وابستگی خارجی به جز کتابخانه های استاندارد پایتون است.
ذکر این نکته از ابتدا ضروری است: من یک دانشمند ML هستم که درکی از عملکرد درونی رمزنگاری ندارم. من این کتابخانه نمونه اولیه را به عنوان یک پروژه سرگرم کننده آخر هفته برای کشف دامنه و یادگیری مفاهیم اولیه نوشتم. در نتیجه، VernamVeil برای استفاده در تولید یا برای محافظت از داده های حساس دنیای واقعی در نظر گرفته نشده است. این بیشتر یک ابزار یادگیری، یک آزمایش است تا یک تضمین امنیتی. می توانید کد کامل را در GitHub پیدا کنید.
چرا به جای کلیدها توابع دارد؟
رمزهای متقارن سنتی متکی به کلیدهای ثابت، اسرار با طول ثابت هستند که در صورت استفاده نادرست یا تکرار، آسیب پذیری ها را آشکار می کنند. در عوض، VernamVeil از a استفاده می کند تابع برای تولید پویا جریان کلید: fx(i, seed) -> bytes.
این تغییر ساده چندین مزیت را باز می کند:
- بدون تکرار واضح: در حالی که ویژگی و دانه ها غیرقابل پیش بینی هستند، جریان کلید تازه باقی می ماند.
- انعطاف پذیری ریاضی: شما می توانید کاردستی کنید
fxتوابع با استفاده از عبارات ریاضی خلاقانه، چند جمله ای یا حتی منابع داده خارجی. - جریان های بالقوه بی نهایت: VernamVeil با الهام از پد یکبار مصرف، امکان پخش جریانهای کلیدی را تا زمانی که لازم است، فراهم میکند و از استفاده مجدد در مجموعه دادههای بزرگ اجتناب میکند.
به طور خلاصه، VernamVeil به جای تکیه بر محرمانه بودن یک رشته ثابت، بر غنا و غیرقابل پیش بینی بودن رفتار ریاضی تکیه می کند. و بالاتر از همه، ماژولار است. شما می توانید خود را تعریف کنید fx که به عنوان کلید خصوصی شما عمل خواهد کرد.
ویژگی های کلیدی و مثال سریع
VernamVeil مجموعه ای از ایده ها را برای بهبود امنیت و آموزش بهداشت رمزنگاری خوب ارائه می دهد:
- جریان کلید سفارشی: از هر تابعی که یک شاخص و یک دانه را می پذیرد برای تولید پویا بایت استفاده کنید. کلید عملکرد و کلید دانه با هم کلید مخفی شما هستند.
- فرآیند متقارن: از همان تابع و seed برای رمزگذاری و رمزگشایی استفاده می شود.
- تکنیک های پنهان سازی: قطعات واقعی با صدای تصادفی پر می شوند، با قطعات تقلبی (فریب) مخلوط می شوند و بر اساس دانه ها مخلوط می شوند.
- تکامل بذر: بعد از هر تکه، دانه تازه می شود و اطمینان حاصل می شود که تغییرات کوچک ورودی منجر به تفاوت های خروجی بزرگ می شود.
- احراز هویت پیام: بررسی تشخیص دستکاری مبتنی بر MAC داخلی.
- بسیار قابل تنظیم: اندازه قطعه، تصادفی بودن لایه، سرعت فریب و موارد دیگر را برای آزمایش سطوح مختلف مبهمسازی و عملکرد تنظیم کنید.
- برداری: برخی از عملیات را می توان به صورت اختیاری با استفاده از Numpy بردار کرد. نسخه بازگشتی پایتون خالص نیز در دسترس است.
در اینجا یک مثال سریع از رمزگذاری و رمزگشایی پیام ها آورده شده است:
import hashlib
from vernamveil import FX, VernamVeil
def keystream_fn(i: int, seed: bytes) -> int:
# Simple cryptographically safe fx; see repo for more examples
hasher = hashlib.blake2b(seed)
hasher.update(i.to_bytes(8, "big"))
return hasher.digest()
fx = FX(keystream_fn, block_size=64, vectorise=False)
cipher = VernamVeil(fx)
seed = cipher.get_initial_seed()
encrypted, _ = cipher.encode(b"Hello!", seed)
decrypted, _ = cipher.decode(encrypted, seed)
این گردش کار ساده چند ایده اساسی را نشان می دهد: بذر در حال توسعه، استفاده از سفارشی fxو چگونه رمزگذاری/رمزگشایی برگشت پذیر در صورت تنظیم صحیح است.
زیر کاپوت: VernamVeil چگونه کار می کند
VernamVeil چندین تکنیک را با هم ترکیب می کند تا رمزگذاری را ایجاد کند که بازیگوش به نظر برسد، اما همچنان اصول رمزنگاری مهمی را معرفی می کند. بیایید مراحل کلیدی را طی کنیم:
۱٫ تفکیک و جداکننده
ابتدا، پیام به تکه هایی با اندازه قابل تنظیم (۳۲ بایت به طور پیش فرض) تقسیم می شود. تکه های واقعی قبل و بعد با بایت های تصادفی پر می شوند. بین هر قطعه، یک جداکننده تصادفی درج شده است، اما مهم این است که خود جداکننده بعداً رمزگذاری می شود، به این معنی که نقش علامت گذاری مرزی آن در متن رمزی نهایی پنهان می شود.
این امر شناسایی محل نگهداری داده های واقعی را بسیار دشوار می کند.
۲٫ سردرگمی با قطعات دروغین و به هم زدن
همه قطعات اصل نیستند. VernamVeil تزریق می کند قطعات تقلبی که حاوی بایت های کاملا تصادفی هستند. سپس قطعات واقعی و جعلی وجود دارد درهم ریخته قطعی، بر اساس یک دانه مخلوط دریافتی.
این چندین اثر دارد:
- مهاجمان نمی توانند به راحتی داده های واقعی را از فریب ها تشخیص دهند.
- حتی اگر برخی از الگوهای ساختاری وجود داشته باشد، آنها عمیقاً در سردرگمی مدفون هستند.
این امر همراه با جداکننده های رمزگذاری شده، بازسازی پیام بدون بذر صحیح و عملکرد قوی را در عمل بسیار دشوار می کند.
۳٫ رمز جریان مبتنی بر XOR با تکامل اولیه
سپس پیام مبهم شده بایت به بایت با جریان کلیدی که توسط سفارشی شما ایجاد می شود XOR می شود. fx تابع
با این حال، یک چرخش مهم وجود دارد: بذر با گذشت زمان رشد می کند. پس از پردازش هر تکه، مقدار seed با هش کردن مقدار seed فعلی همراه با دادههای رمزگذاری شده (یا رمزگشایی) تازهسازی میشود.
این تکامل به دو هدف دست می یابد:
- اثر بهمن: تغییر یک بایت در ابتدای پیام به تغییرات بزرگ در خروجی تبدیل می شود.
- رازداری معکوس: رازداری معکوس حفظ می شود زیرا هر دانه با هش کردن دانه قبلی با متن ساده فعلی تکامل می یابد، به طوری که دانش دانه فعلی مانع از بازیابی دانه های قبلی می شود.
دانه ها به عنوان یک عمل می کنند زنجیره ای با دولتجلوگیری از تکرار الگوهای جریان های کلیدی
۴٫ احراز هویت پیام (MAC)
در نهایت، در صورت فعال بودن، VernamVeil یک فرم ساده از آن را اضافه می کند رمزگذاری تایید شده:
- BLAKE2b HMAC متن رمز محاسبه شده است.
- برچسب به دست آمده به متن رمزی اضافه می شود.
هنگام رمزگشایی، تگ MAC بررسی می شود قبل از رمزگشایی پیام اگر برچسب مطابقت نداشته باشد، رمزگشایی بلافاصله با شکست مواجه میشود و از دستکاری و انواع خاصی از حملات مانند اوراکلهای padded محافظت میکند.
برای اطلاعات بیشتر در مورد طراحی، ویژگیها، اخطارها و بهترین روشها و همچنین نمونههای فنی بیشتر، فایل readme را در مخزن ببینید.
جهت های آینده و ایده های باز
VernamVeil یک نمونه اولیه است و جای زیادی برای آزمایش و بهبود دارد. در اینجا برخی از جهت گیری های ممکن برای آینده وجود دارد:
عملیات برداری: حرکت از پایتون خالصویرایش: این ویژگی پس از انتشار اولیه اضافه شد و عملکرد استقرار را تا حد زیادی افزایش داد.bytesبهnumpy،PyTorchیاTensorFlowآرایهها میتوانند به طور قابلتوجهی سرعت تولید جریان کلید، رمزگذاری تکهای و تولید نویز تصادفی از طریق برداری را افزایش دهند.کنده کاری: یک رشته پس زمینه می تواند به طور مداوم عملیات IO را آماده کند تا رمزگذاری هرگز متوقف نشود.ویرایش: IO آسنکرون پس از انتشار اولیه اضافه شد.ابزار کنسول: یک رابط خط فرمان (CLI) اضافه کنید تا کاربران بتوانند VernamVeil را مستقیماً از ترمینال با پارامترهای قابل تنظیم اجرا کنند.ویرایش: این ویژگی پس از انتشار اولیه اضافه شد.جابجایی به زبان سطح پایین تر: پایتون برای وضوح و سهولت آزمایش انتخاب شد، اما جابجایی به زبان سریعتری مانند Rust، C++ یا حتی Go میتواند سرعت و مقیاسپذیری را تا حد زیادی بهبود بخشد.ویرایش: من یک پسوند C اختیاری را برای سرعت بخشیدن به عملیات هش از زمان انتشار اولیه ایجاد کرده ام.بهبود طراحی رمزگذاری: مدل رمزگذاری اساسی (مبتنی بر XOR، تابع محور) برای وضوح آموزشی طراحی شده است، نه برای مقاومت در برابر حملات پیشرفته. قلمرو ناشناختهای در طراحی لایههای مبهمسازی قویتر، تولیدکنندههای جریان کلید بهتر، و طرحهای رمزگذاری تایید شده امنتر وجود دارد.ویرایش: من Synthetic IV Seed Initialisation را اضافه کردم، به رمزگذاری و سپس احراز هویت MAC تغییر دادم، هش را با HMAC جایگزین کردم و قوی اضافه کردم.fxنمونه ها و سایر ویژگی ها از زمان انتشار اولیه.
اگر ایدهها یا پیشنهادات بیشتری دارید، میتوانید یک مشکل GitHub را باز کنید. من می خواهم پیشرفت ها را با هم در نظر بگیرم! و اگر شما یک متخصص رمزنگاری هستید، هر گونه انتقاد سازنده بسیار قدردانی خواهد شد. VernamVeil به عنوان یک تمرین یادگیری توسط شخصی خارج از حوزه رمزنگاری ایجاد شده است، بنابراین به احتمال زیاد نقصها یا تصورات نادرست جدی باقی میمانند. همچنین، به دلیل تجربه محدود من در رمزنگاری، برخی از تکنیک هایی که استفاده کردم ممکن است ناخواسته مفاهیم موجود را دوباره ابداع کنند. بهویژه، اگر الگوهای آشنا یا روشهای استانداردی را که من به درستی یا اصلاً نامبردهام تشخیص نمیدهید، بسیار سپاسگزار خواهم بود اگر بتوانید به آنها اشاره کنید. یادگیری اصطلاحات و منابع صحیح به درک بهتر و بهبود پروژه به من کمک می کند.
افکار نهایی
VernamVeil برای جایگزینی کتابخانه های رمزنگاری جدی مانند AES یا ChaCha20 در نظر گرفته نشده است. در عوض، یک است زمین بازیراهی برای یادگیری، سرهم بندی و کاوش مفاهیمی مانند تولید کلید پویا، رمزگذاری تایید شده، تکامل دانه و مبهم سازی بدون گم شدن در ریاضیات بسیار فشرده.
این نشان می دهد که رمزنگاری نه تنها در مورد محافظت از اسرار بلکه در مورد آن نیز است غیرقابل پیش بینی بودن لایه بندی، شکستن فرضیاتو خلاقانه فکر کردن در مورد جایی که ممکن است آسیب پذیری ها پنهان شوند.
اگر کنجکاو هستید که چگونه رمزگذاریهای بدوی در دنیای واقعی ساخته میشوند، یا فقط میخواهید ریاضی و کد را به روشی سرگرمکننده کشف کنید، VernamVeil یک نقطه شروع عالی است. منتظر نظرات و بازخورد شما هستم.
