خانه » وبلاگ » الکترونیک » پروژه گیرنده ریموت کنترل هاپینگ کد
2026/04/16 توسط اسماعیل , 2 دیدگاه

پروژه گیرنده ریموت کنترل هاپینگ کد


معرفی

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

مقدمه

بزار با یه سوال شروع کنم، میدونی وقتی سوئیچ ریموت ماشین رو فشار میدی چه اتفاقی میفته؟

ریموت فرستنده باید یک سیگنال ارسال کنه به ماشین، تا در رو باز کنه، ولی این تازه شروع مشکلاته!
چون سیگنال فرستنده که فقط به سمت ماشین نمیره، بلکه به همه سمت منتشر میشه و هر کسی میتونی سیگنال رو دریافت کنه ، کپی کنه و دوباره انتشار بده!
مثل این میمونه که با هر بار فشردن کلید، هزارتا نسخه کپی از سوئیچ ماشین رو تا ۵۰ متر به اطراف پرت میکنی!

در مورد کرکره مغازه ها و دزدگیرهای ارزون ماشین، متاسفانه این مورد واقعیت داره!
ولی در مورد سوئیچ فابریک ماشین، یا دزدگیر های ژاپنی، راهکاری استفاده میشه:
راهکار به این شکله که هر بار کلید رو عوض کنید! و هر کلید فقط یک بار قابلت استفاده داره!
اینجاست که رمز‌نگاری به کار میاد!

ایران خودرو هم مثل چند شرکت دیگه میاد از الگوریتم KeeLoq برای رمزگزاری سیگنال بین فرستنده و گیرنده استفاده میکنه.
این الگوریتم رو شرکت میکروچیپ ابداعش کرده و هم‌الکنون هم تحط لیسانس خودشه!
به عنوان مثال، آیسی HCS301 یک آیسی ریموت هست که به عنوان فرستنده در ریموت های هاپینگ که از این الگوریتم استفاده میکنند موجوده، مثل بتا ۲۰۱۱ .

گیرنده چی؟
موضوع اینجاست که جالب میشه!
هر بار کد دریافت شده متفاوته! رمز شده! چطور دیکد کنیم؟

فرستنده

در این پروژه به عنوان فرستنده ما از یک ریموت کنترل هاپینگ مرسوم در بازار استفاده کردیم که از انکودر HCS301 در اون استفاده شده بود.
الگوریتم کی‌لاک نیاز داره که یک کلید ۶۴ بیتی یکسان در فرستنده و گیرنده، پروگرام بشه، تا بتونه به درستی کار کند و دیکد رو انجام بده.
معمولا کلید رو نمیشه به سادگی از فرستنده خوند، به همین دلیل باید اول کلید رو روی فرستنده پروگرام کرد یا کلید پروگرام شده رو از فروشنده ریموت دریافت کرد.

پروگرام کردن کلید در فرستنده

روش پروگرام کردن کلید 64 بیتی کیلاک روی ریموت هاپینگ در پست پایین کامل توضیح داده شده:

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

گیرنده

الگوریتم رمزگشایی سیگنال فرستنده

حالا نیاز داریم یک کد داشته باشیم که با داشتن کلید ۶۴ بیتی در گیرنده، اطلاعات دریافتی رو با الگوریتم کی‌لاک دیکد کنه. روش عملکرد الگوریتم و پیاده سازی انکد و دیکد کی‌لاک به زبان C رو در پست زیر مطالعه کنید:

برو به پست الگوریتم رمزنگاری KeeLoq !

شماتیک مدار گیرنده

این پروژه که در واقع رمزگشایی ریموت هاپینگ است ما از یک گیرنده رادیویی استاندارد 433 مگاهرتز و برد آرداینو برای دریافت و رمزگشایی اطلاعات ارسال شده از یک ریموت هاپینگ استفاده میکنیم.

مطابق شمای زیر مدار را میبندیم و برد آرداینو رو به کامپیوتر متصل میکنیم.

پروژه دریافت سیگنال ریموت هاپینگ
نقشه اتصالات گیرنده ریموت هاپینگ

برنامه گیرنده ریموت هاپینگ

برنامه برد آرداینو رو میتونید اینجا پیدا کنید، برنامه رو از اینجا ( یا اینجا ) دانلود کنید و روی آرداینو پروگرام کنید.

یادتون نره که کلید رمزگشایی کیلاک رو در جای مشخص شده در کد آرداینو قرار بدید، طبق توضیحات جهت چینش کلید رو رعایت کنید.

ترمینال سریال برد آرداینو را فعال کنید و مقادیر دریافت شده رو برسی کنید.

توضیحات تکمیلی

این پروژه مثالی از گیرنده ریموت هاپینگ است که از حالت Simple Learn در اون استفاده شده.
همچنین مدیریت اندازه پنجره دریافت کانتر و همزمانی مجدد در این کد پیاده سازی شده.

Windows in the KeeLoq hopping code
Windows in the KeeLoq hopping code

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

ویدیو

توجه

برای کاهش پیچیدگی و جنبه های آموزشی این پروژه، ترتیب عملکرد گیرنده کمی متفاوت از دستورالعمل های میکروچیپ است. بنا براین این پروژه رو نمیتوان به صورت مستقیم روی محصول تجاری استفاده کرد و صحت عملکرد اون تضمین نمیشه!

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


م.ص
2026/04/25

سلام روزتون بخیر ممنون از مطالب کاملتون در مورد ریموت کد هاپینگ شما در مطالبتون ذکر کردید (الگوریتم کی‌لاک نیاز داره که یک کلید ۶۴ بیتی یکسان در فرستنده و گیرنده، پروگرام بشه)ولی در دزدگیرها فقط 66 بیت ارسالی از ریموت را در هنگام لرن کردن ریموت میخوانند که کلید 64 بیتی شامل ان نمیشود.پس این کلید 64 بیتی را چگونه میتوانیم در گیرنده ذخیره کنیم؟

اسماعیل
2026/04/25

سلامت باشید، بله شما درست میگید. برای جلوگیری از پیچیدگی، این موظوع رو توضیح ندادم. اگر نرم افزار پروگرامر رو دقیقتر برسی کنید متوجه میشید سه نمونه حالت لرن وجود داره! (Simple,Normal,Secure) ولی همان طور که در توضیحات پروژه نوشتم این پروژه از حالت Simple استفاده میکنه که یک کلید یکسان در گیرنده و فرستنده برای رمزنگاری و رمزگشایی استفاده میکنه.(البته میشه که چندین ریموت برای یک برند خاص کلید مشابهی داشته باشند با سریال مختلف ولی این کار درستی نیست، پس این مورد رو بیخیال میشیم و میریم سراغ حالت لرن بعدی). حالت لرن رو توی پروگرامر بزارید روی Normal متوجه میشید که قسمت کلید غیرفعال میشه و به جای اون قسمت Manufacture Code فعال میشه. خب این منیوفکچر کد چیه؟ این کدی محرمانه و مختص یک شرکت و کمپانیه که مبنای ساخت کلید رمزنگاریه! البته نه به تنهایی! بلکه با کمک سریال فرستنده! این یعنی چی؟ یعنی اینکه کلید رمزنگاری از ترکیب سریال فرستنده توسط منیوفکچرکد ساخته میشه! حالا اگر گیرنده منیوفکچر کد رو بدونه، دیگه نیازی به کلید نداره چون با توجه به سریال فرستنده کلید رو خودش جنریت میکنه! توی حالت لرن Secure هم علاوه بر سریال میاد از SEED استفاده میکنه!

ارسال نظر