برنامه تولید کلید در C:
#include
#includ
#includ
# تعریف کلیدی 16
اصلی خالی است ()
{
من
کلید شارژ [KEYSIZE]؛
printf ("٪ lld n" ، (مدت طولانی طولانی) (NULL))؛
srand (زمان (NULL))؛
برای (i = 0؛ i <KEYSIZE؛ i ++) {
کلید [i] = رند ()٪ 256؛
printf ("٪. 2x" ، (کلید شارژ نشده) [i])؛
}
printf (" n")؛
}
سناریو:
در 17 آوریل 2018 ، آلیس اظهارنامه مالیاتی خود را به پایان رساند و بازپرداخت (پرونده PDF) را در دیسک خود ذخیره کرد. وی برای محافظت از پرونده ، پرونده PDF را با استفاده از كلیدی كه از برنامه فوق الذكر تهیه شده است رمزگذاری كرد. او این كلمه را در یك نوت بوك نوشت ، كه به صورت ایمن در گاوصندوق ذخیره می شود. چند ماه بعد ، باب وارد رایانه خود شد و یک نسخه از اظهارنامه مالیاتی رمزگذاری شده را دریافت می کند. از آنجا که آلیس مدیرعامل یک شرکت بزرگ است ، این پرونده بسیار با ارزش است.
باب نمی تواند کلید رمزگذاری را بدست آورد ، اما با نگاهی به رایانه آلیس ، وی برنامه نسل اصلی را مشاهده کرد و گمان کرد که ممکن است کلید رمزگذاری آلیس تولید شود. برنامه. وی همچنین متوجه زمان تحویل پرونده رمزگذاری شده ، که "2018-04-17 23:08:49" است. وی حدس زد كه كلید ممكن است قبل از ایجاد پرونده ، در یك پنجره 2 ساعته ایجاد شود.
از آنجا كه این پرونده یك پرونده PDF است ، دارای یك عنوان است. قسمت ابتدای هدر همیشه شماره نسخه است. در حدود زمان ایجاد پرونده ، PDF-1.5 رایج ترین نسخه است ، یعنی عنوان هدر با٪ PDF-1.5 شروع می شود ، که 8 بایت داده است. 8 بایت بعدی از داده ها نیز به راحتی قابل پیش بینی هستند. بنابراین ، باب به راحتی 16 بایت اول متن ساده را بدست آورد. او براساس داده های متا پرونده رمزگذاری شده ، می داند كه این پرونده با استفاده از aes-128-cbc رمزگذاری شده است. از آنجایی که AES رمزنگاری 128 بیتی دارد ، متن ساده 16 بایت شامل یک بخش متن ساده است ، بنابراین باب یک بلوک از متن ساده و متن متن متن آن را می شناسد. علاوه بر این ، باب همچنین بردار اولیه (IV) را از پرونده رمزگذاری شده (IV هرگز رمزگذاری نمی شود) می شناسد. اینجا چیزی است که باب می داند:
- متن آشکار: 255044462d312e350a25d0d4c5d80a34
- متن رمزی: d06bf9d0dab8e8ef880660d2af65aa82
- IV: 09080706050403020100A2B2C2D2E2F2
کار شما این است برای کمک به باب پیدا کردن کلید رمزنگاری آلیس، بنابراین شما می توانید کل سند را رمزگشایی کرد. شما باید یک برنامه بنویسید تا تمام کلیدهای ممکن را امتحان کنید. اگر کلید به درستی تولید شده باشد ، این کار امکان پذیر نخواهد بود. با این حال ، از آنجا که آلیس از زمان () برای بذر تولید کننده شماره تصادفی خود استفاده می کرد ، باید بتوانید کلید او را به راحتی پیدا کنید.