خانه » وبلاگ » آموزشی » الگوریتم رمزنگاری KeeLoq
2024/01/12 توسط اسماعیل , 1 دیدگاه

الگوریتم رمزنگاری KeeLoq


مقدمه

الگوریتم رمزنگاری KeeLoq یک روش رمزنگاری با کلید متقارن 64 بیتی است که توسط میکروچیپ توسعه داده شده. در این قسمت ما به نحوه عملکرد الگوریتم رمزنگاری و رمزگشایی کیلاک میپردازیم و در نهایت یک کد به زبان C برای استفاده رائه میکنیم.

رمزنگاری متقارن (Symmetric Encryption) یک روش رمزنگاری است که در آن یک کلید واحد برای رمزگذاری و رمزگشایی داده‌ها استفاده می‌شود. این کلید باید بین دو طرفی که در حال تبادل اطلاعات هستند به اشتراک گذاشته شود.

کاربرد

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

شایان ذکر است که در موارد بالا فرستنده از یک کانتر در اطلاعات رمزنگاری استفاده میکند، اینکار باعث میشود که هر دیتای ارسال شده، متفاوت با قبلی باشد و این عمل باعث مقاومت بالای سیستم در برابر حملات شنود و بازپخش شود.

مشخصات

نحوه عملکرد رمزنگاری KeeLoq

روند کلی رمزنگاری KeeLoq را میتوان در تصویر زیر مشاهده کرد، در ادامه به توضیح این روند خواهیم پرداخت.

KeeLoq encryption algorithm
KeeLoq encryption algorithm

برای شروع رمزنگاری از یک کلید 64 بیتی ثابت (آرایه پایینی در تصویر فوق) استفاده میشود، در حالی که دیتای 32 بیتی (آرایه بالایی در تصویر فوق) باید در یک حافظه متغیر ذخیره شود چون در هر دور اجرای الگوریتم، مقدار آن تغییر خواهد کرد.

قبل از اجرای الگوریتم باید مقدار کلید و دیتا را به الگوریتم داد، پس از 528 بار اجرا شدن الگوریتم، مقدار دیتا تغییر خواهد کرد و مقدار جدید دیتا درواقع مقدار تبدیل به رمز شده خواهد بود.

مرحله 1:

بیت های خاصی از دیتا (1،9،20،26،31) در کنار هم قرار میگیرند و تشکیل یک عدد 5 بیتی را میدهند.
این عدد میتواند بین 0 تا 31 باشد، محدوده مناسب برای انتخاب یک بیت از یک متغیر 32 بیتی!
از این عدد برای ماسک کردن یک بیت از رشته NLF استفاده میشود، مقدار بیت انتخاب شده وارد مرحله بعد میشود.

مرحله 2:

در این مرحله عملیات XOR بیتی بین چند ورودی انجام میشود و خروجی وارد مرحله بعد میشود.

بیت A : اولین بیت کلید (در دورهای بعدی: دومین، سومین ، … ، آخرین ، اولین ، دومین ، … )
بیت B : بیت خروجی از مرحله 1
بیت C : بیت 0 دیتا
بیت D : بیت 16 دیتا

خروجی = A xor B xor C xor D

مرحله 3:

متغیر 32 بیتی دیتا، یک بیت به سمت راست شیفت داده میشود و جای خالی ایجاد شده در پر اهمیت ترین بیت آن (بیت31) با مقداری که از مرحله 2 به دست آمد پر میشود.

برو به مرحله 1 و این کار را 528 بار انجام بده.

مقدار دیتا 32 بیتی الان شامل مقدار تبدیل به رمز شده توسط الگوریتم KeeLoq است!

پایان!

نحوه عملکرد رمزگشایی KeeLoq

برای رمزگشایی توسط الگوریتم KeeLoq کافیه همه مسیرها رو برعکس بریم!
پس مطابق روند نمای زیر پیش میریم:

KeeLoq decryption algorithm
KeeLoq decryption algorithm

قبل از اجرای الگوریتم باید کلید 64 بیتی و مقدار دیتای 32 بیتی رمز شده جهت رمزگشایی رو به الگوریتم داد.

مرحله 1:

بیت های خاصی از دیتا (0،8،19،25،30) در کنار هم قرار میگیرند و تشکیل یک عدد 5 بیتی را میدهند.
این عدد میتواند بین 0 تا 31 باشد، محدوده مناسب برای انتخاب یک بیت از یک متغیر 32 بیتی!
از این عدد برای ماسک کردن یک بیت از رشته NLF استفاده میشود، مقدار بیت انتخاب شده وارد مرحله بعد میشود.

مرحله 2:

در این مرحله عملیات XOR بیتی بین چند ورودی انجام میشود و خروجی وارد مرحله بعد میشود.

بیت A : بیت پانزده کلید (در دورهای بعدی هربار یک بیت کم میشود. مثال: بیت14 ، بیت13 ، … ، بیت0 ، بیت63 ، بیت 62 ، … )
بیت B : بیت خروجی از مرحله 1
بیت C : بیت 31 دیتا
بیت D : بیت 15 دیتا

خروجی = A xor B xor C xor D

مرحله 3:

متغیر 32 بیتی دیتا، یک بیت به سمت چپ شیفت داده میشود و جای خالی ایجاد شده در کم اهمیت ترین بیت آن (بیت0) با مقداری که از مرحله 2 به دست آمد پر میشود.

برو به مرحله 1 و این کار را 528 بار انجام بده.

مقداردیتا 32 بیتی الان شامل مقدار رمزگشایی شده توسط الگوریتم KeeLoq است!

پایان!

پیاده سازی الگوریم رمزنگاری و رمزگشایی KeeLoq به زبان C برای استفاده در گیرنده های رادیویی و سیستم های الکترونیکی

با توجه به کاربرد این الگوریتم در سیستم های کنترلی رادیویی ، صنعت الکترونیک و میکروکنترلر، کدهای نوشته شده باید توانایی بالا و کمترین سرعت اجرا را روی ادوات الکترونیک داشته باشند. از این رو زبان اسمبلی گزینه خوبی برای محصول میتواند باشد ولی به دلیل نزدیکی و وابستگی به ماشین و قابلیت فهم کم آن، همچنین اهداف آموزشی کد ها به زبان C نوشته شده اند ولی سعی شده کدها به صورت بهینه و با قابلیت پیاده سازی روی اکثر سیستم های میکروکنترلری و کامپیوتری ارائه شوند.

مشتاقانه به یاری شما منتظر ارتقاع سطح پروژه ها هستیم.


پیاده سازی انکد و دیکد کی‌لاک به زبان سی از اینجا قابل دریافته:

پروژه عملی

برای دیدن یه کاربرد واقعی از این الگوریتم یه نگاه به پست پروژه گیرنده ریموت کنترل هاپینگ کد بنداز!

مقاله

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

بیشتر بخوانید


احسان
2026/04/16

عالی! دمت گررم خدایی ...

ارسال نظر