ممنون دوست عزیز
در مورد سه مورد گفته شده من تحقیق کردم , هیچکدام برای کار من مفید نبود,بنابراین نتیجه میگیریم که شما منظور من رو خوب متوجه نشده اید.اجازه بدید واضح تر بگم :
من دو تا سیستم دارم که به صورت بیسیم با هم در ارتباط هستند.تکنولوژی بیسیم RF است که شنود و هک آن کار خیلی راحتی است.
روش کار سیستم ها به صورت ساده :
سیستم شماره 1 دارای یک کلید است.
سیستم شماره 2 دارای یک کلید و یک لامپ است.
زمانی که روی سیستم شماره 1 کلید رو در حالت روشن قرار میدیدم,در سیستم شماره 2 کلید به صورت اتوماتیک روی حالت روشن میره و لامپ روشن میشه,برای خاموش شدن هم همین سناریو اجرا میشه.
زمانی که روی سیستم شماره 2 کلید رو در حالت روشن قرار میدیم,لامپ روشن میشه و در سیستم شماره 1 کلید به طور اتوماتیک روی حالت روشن میره,برای خاموش شدن هم همین سناریو اجرا میشه.
هنگامی که در هر یک از این سیستم ها کلید تغییر وضعیت بده ,یک دستور که حاوی وضعیت فعلی کلید است برای سیستم دیگر ارسال میشود تا سیستم دیگر هم تغییر وضعیت دهد.
فرمت دستور به دلیل اینکه شبکه ی واقعی بیش از دو کلاینت(سیستم) دارد و هر کلاینت بیش از یک کار انجام میده به صورت زیر است:
وضعیت کلید(برای مثال ما)+آدرس کلاینت+آدرس سرور
به عنوان مثال :
آدرس سرور (سیستم شماره 1): 0xAA
آدرس کلاینت(سیستم شماره 2) : 0xBB
وضعیت کلید اگر لامپ شروع شود : 0x01
وضعیت کلید اگر لامپ خاموش شود : 0x00
در کل مدت زمان کار سیستم فقط دو دستور زیر ردوبدل میشوند :
برای روشن شدن لامپ: 0xAA+0xBB+0x01
برای خاموش شدن لامپ : 0xAA+0xBB+0x00
حالا هر کس بیاد کانال ارتباطی ما رو استراق سمع کنه(که کاری بسیار راحت است) به کد های دسترسی پیدا میکند و میتواند با ارسال همان کد ها (که باز هم کاری بسیار راحت است) شبکه رو کنترل کند.
حالا بررسی روش های مختلف :
الف hash :
مزایا برای هدف ما :
هیچ
معایب برای هدف ما :
1.دو دستور بالا دو مقدار hash ثابت تولید میکنند.که در صورت شنود آن ها دوباره ........ .
2. و .....
ب رمزنگاری با AES :
مزایا برای هدف ما :
1.در صورتی که کلید رمزگذاری ثابت باشد هیچ.
معایب برای هدف ما :
1.در صورتی که کلید رمز نگاری ثابت باشد ,دوباره برای دو دستور بالا ,دو دستور رمزگذاری شده ی ثابت داریم که اگر شنود شوند ........ .
2.برای سیستم های جاسازی شده ,از انجایی که سخت افزار محدودی دارد و روش AES نسبتا سنگین است .(در صورتی که مشکل اول حل شود,میشود از این مورد چشم پوشی کرد.).
3 و ......
ج salt :
این روش هم که مکمل hash است,وقتی hash جواب ندهد این هم فایده ای ندارد.
د روش خودم :
من خودم میخاستم از رمزنگاری به کمک XOR استفاده کنم,که باز هم در صورت ثابت بودن کلید مشکلات گفته شده رو داشت.برای رفع مشکل گفتم کلید متغییر ایجاد میکنم,به صورت زیر :
1.برای اولین ارتباط کلید به صورت از پیش تعیین شده است.
2.هر دستوری که ارسال میشود,کلید رمزنگاری دستور بعدی رو مشخص میکنه.بنابر این فرمت دستور ها هم به صورت زیر تغییر کرد :کلید برای رمز نگاری دستور بعدی +وضعیت کلید(برای مثال ما)+آدرس کلاینت+آدرس سرور
3.فقط سرور کلید های بعدی را مشخص میکند : همونطور که گفتم دستورات به صورت دستور-پاسخ هستند.دو حالت زیر را داریم:
*سرور (سیستم 1) به کلاینت (سیستم 2) دستور میدهد و کلاینت پس از دریافت دستور ,پاسخی مبنی بر در یافت دستور برای سرور ارسال میکند.
** کلاینت به سرور دستور میدهد و سرور پس از دریافت دستور,پاسخی مبنی بر دریافت دستور برای کلاینت ارسال میکند.
بنابر این در حالت * سرور در دستور ارسالی به کلاینت کلید بعدی رو رمشخص میکند و در حالت ** در پاسخی ک به کلاینت میدهد کلید بعدی رو مشخص میکند.
مشکل روش خودم اینه که در حالت * سرور به کلاینت یک دستور میدهد و کلید جدید را همراه آن ارسال میکند,کلاینت کلید جدید را ذخیره کرده و پاسخ دستور را به سرور باز میگرداند,حالا به هر دلیلی ممکن است که پاسخ به سرور نرسد,سرور چون پاسخ را دریافت نکرده فکر میکند که کلاینت هم دستور را دریافت نکرده است بنابر این از کلید جدید که در دستور بود صرف نظر میکند.حالا اگه دوباره سرور بخاد دستوری را ارسال کنه ,با کلید قبلی آن را رمزنگاری میکند,ولی در کلاینت با کلید جدید دیکد میشود,از این جا به بعد سیستم قطع میشود.
فکر کنم که حالا دیگه همه چیز واضح شد.اگه دوستان میتونند کمکی بکنند لطفا دریغ نکنید,هر روشی که فکر میکنید میتونه مناسب باشه بگید شاید از جمع بندی اون ها بشود یک چیزی درست کرد
ممنون