ریموت کنترلرهای هاپینگ یا رولینگ از الگوریتم KeeLoq برای رمزگذاری اطلاعات ارسالی استفاده میکنند. ما اینجا قراره سیگنال ارسالی یک ریموت هاپینگ یا رولینگ رو دریافت کنیم، رمزگشایی کنیم و یک عملگر رو باهاش راه بندازیم.
بزار با یه سوال شروع کنم، میدونی وقتی سوئیچ ریموت ماشین رو فشار میدی چه اتفاقی میفته؟
ریموت فرستنده باید یک سیگنال ارسال کنه به ماشین، تا در رو باز کنه، ولی این تازه شروع مشکلاته!
چون سیگنال فرستنده که فقط به سمت ماشین نمیره، بلکه به همه سمت منتشر میشه و هر کسی میتونی سیگنال رو دریافت کنه ، کپی کنه و دوباره انتشار بده!
مثل این میمونه که با هر بار فشردن کلید، هزارتا نسخه کپی از سوئیچ ماشین رو تا ۵۰ متر به اطراف پرت میکنی!
در مورد کرکره مغازه ها و دزدگیرهای ارزون ماشین، متاسفانه این مورد واقعیت داره!
ولی در مورد سوئیچ فابریک ماشین، یا دزدگیر های ژاپنی، راهکاری استفاده میشه:
راهکار به این شکله که هر بار کلید رو عوض کنید! و هر کلید فقط یک بار قابلت استفاده داره!
اینجاست که رمزنگاری به کار میاد!
ایران خودرو هم مثل چند شرکت دیگه میاد از الگوریتم KeeLoq برای رمزگزاری سیگنال بین فرستنده و گیرنده استفاده میکنه.
این الگوریتم رو شرکت میکروچیپ ابداعش کرده و همالکنون هم تحط لیسانس خودشه!
به عنوان مثال، آیسی HCS301 یک آیسی ریموت هست که به عنوان فرستنده در ریموت های هاپینگ که از این الگوریتم استفاده میکنند موجوده، مثل بتا ۲۰۱۱ .
گیرنده چی؟
موضوع اینجاست که جالب میشه!
هر بار کد دریافت شده متفاوته! رمز شده! چطور دیکد کنیم؟
در این پروژه به عنوان فرستنده ما از یک ریموت کنترل هاپینگ مرسوم در بازار استفاده کردیم که از انکودر HCS301 در اون استفاده شده بود.
الگوریتم کیلاک نیاز داره که یک کلید ۶۴ بیتی یکسان در فرستنده و گیرنده، پروگرام بشه، تا بتونه به درستی کار کند و دیکد رو انجام بده.
معمولا کلید رو نمیشه به سادگی از فرستنده خوند، به همین دلیل باید اول کلید رو روی فرستنده پروگرام کرد یا کلید پروگرام شده رو از فروشنده ریموت دریافت کرد.
روش پروگرام کردن کلید 64 بیتی کیلاک روی ریموت هاپینگ در پست پایین کامل توضیح داده شده:
برو به پست پروگرام کردن ریموت کنترل هاپینگ !
حالا نیاز داریم یک کد داشته باشیم که با داشتن کلید ۶۴ بیتی در گیرنده، اطلاعات دریافتی رو با الگوریتم کیلاک دیکد کنه. روش عملکرد الگوریتم و پیاده سازی انکد و دیکد کیلاک به زبان C رو در پست زیر مطالعه کنید:
برو به پست الگوریتم رمزنگاری KeeLoq !
این پروژه که در واقع رمزگشایی ریموت هاپینگ است ما از یک گیرنده رادیویی استاندارد 433 مگاهرتز و برد آرداینو برای دریافت و رمزگشایی اطلاعات ارسال شده از یک ریموت هاپینگ استفاده میکنیم.
مطابق شمای زیر مدار را میبندیم و برد آرداینو رو به کامپیوتر متصل میکنیم.

برنامه برد آرداینو رو میتونید اینجا پیدا کنید، برنامه رو از اینجا ( یا اینجا ) دانلود کنید و روی آرداینو پروگرام کنید.
یادتون نره که کلید رمزگشایی کیلاک رو در جای مشخص شده در کد آرداینو قرار بدید، طبق توضیحات جهت چینش کلید رو رعایت کنید.
ترمینال سریال برد آرداینو را فعال کنید و مقادیر دریافت شده رو برسی کنید.
این پروژه مثالی از گیرنده ریموت هاپینگ است که از حالت Simple Learn در اون استفاده شده.
همچنین مدیریت اندازه پنجره دریافت کانتر و همزمانی مجدد در این کد پیاده سازی شده.

شایان ذکر است که به دلیل استفاده از حالت Simple Learn ، گیرنده باید کلید الگوریتم KeeLoq همسان با فرستنده رو بدونه. این کلید در قسمتی از کد گیرنده باید ویرایش بشه تا عملیات رمزگشایی به درستی انجام بشه.
برای کاهش پیچیدگی و جنبه های آموزشی این پروژه، ترتیب عملکرد گیرنده کمی متفاوت از دستورالعمل های میکروچیپ است. بنا براین این پروژه رو نمیتوان به صورت مستقیم روی محصول تجاری استفاده کرد و صحت عملکرد اون تضمین نمیشه!
سلام روزتون بخیر ممنون از مطالب کاملتون در مورد ریموت کد هاپینگ شما در مطالبتون ذکر کردید (الگوریتم کیلاک نیاز داره که یک کلید ۶۴ بیتی یکسان در فرستنده و گیرنده، پروگرام بشه)ولی در دزدگیرها فقط 66 بیت ارسالی از ریموت را در هنگام لرن کردن ریموت میخوانند که کلید 64 بیتی شامل ان نمیشود.پس این کلید 64 بیتی را چگونه میتوانیم در گیرنده ذخیره کنیم؟