PDA

View Full Version : کشف الگوریتم رمز



joker
پنج شنبه 14 بهمن 1389, 00:24 صبح
سلام
فایلی شامل 3تا فایل text معمولی هست
اولی : Orginal_Test.txt یک فایل هست که توش فقط یک متن ساده salam نوشته شده
دومی : Encrypt_test.txt همان فایل بالا هست که رمز شده و به شکل (ـV§ة ) دیده میشه

و اما سومی :CanUfindAlgoritm.txt با توجه به داشتن دو فایل بالا آیا میتوانید الگوریتم رمزنگاری را پیدا کنید و متن اصلی در این فایل را بفهمید چه چیزی بوده و اون را همینجا بنویسید :لبخند:؟

پیوست : الگوریتم دو طرفه و قابل بازگشت هست.

http://www.alt.ir/other/ramz.zip

Raham
پنج شنبه 14 بهمن 1389, 10:11 صبح
جوکر جان فکر نمیکنم اینکار شدنی باشه!
این دقیقا یک معادله 3 مجهولی هستش!
نه Key موجود نه متن اصلی نه الگوریتم!
مثلا شما بیا به من بگو این اعدادی که پایین نوشتم متن اصلیش چیه؟
شما حتی اگه الگوریتم رو هم داشته باشین نمیشه! چرا؟ الن میگم: به این مثال ساده دقت کنین
StrCoded=F(X,Y)
//StrCoded=ABF5EC55C9
بیا رمز و پیدا کن! نمیشه! حتی اگه الگوریتم رو داشته باشیم چون رمز رو نداریم نمیشه! مثلا چون رمز و نمیدونیم اگه با کلید 123 Decode کنیم حاصل میشه
SALAM اگه با 234 DeCode کنیم میشه !KALAK

00068100006811000694800069500007086000708900072240 00722800073620007367000750000075060007638000764500 07776000778400079140007923000667300066720006811000 68110006949000695000070870007089000722500072280007 36300073670007501000750600076390007645000777700077 84000791500079230006674000667200068120006811000695 00006950000708800070890007226000722800073640007367 00075020007506000764000076450007778000778400079160 00792300066750006672000681300068110006951000695000 07089000708900072270007228000736500073670007503000 750600076410007645

joker
پنج شنبه 14 بهمن 1389, 10:29 صبح
نه Key موجود نه متن اصلی نه الگوریتم!با این حساب معادله دو مجهولیه :)

فکر نکنم توی دنیا هیچ کشف رمزی بوده که الگوریتم و key براش مشخص بوده ، و الا دیگه بهش نمیگن رمز !
دراین مورد متن اصلی(salam ) و نتیجه نهائی برای مثال موجوده.

اگه احیانا لازم هست هرمتن دیگه ای که مد نظرتون هست به عنوان تست بگین تا رمز کنم بزارم تا راحت تر بتونید توی سرومغزش بزنید.
اسم فایلها متن موجود در فایل رمز شده است

Raham
پنج شنبه 14 بهمن 1389, 11:15 صبح
سلام
بله حدس شما درسته! اما اون بنده خدايي كه ميره الكوريتم رو بيدا ميكنه فايل اجرايي برنامه Coder و داره اونو آناليز ميكنه نحوه كد كردن كه مشخص شد تازه بايد Brute Force نوشت واسش.
اينطوري اكه بخواين ميتونم واستون يه الكوريتم بيارم كه شما اين متن Salam رو بهش بدين خروجيش با هدف شما يكسان باشه ! اما الكوريتم يكسان نيست و متن هاي ديكه بهش بدين تفاوتش معلوم ميشه!
اين نظر من بود.
حالا مي خواي صبر كن ببين اساتيد جي ميكن.

يا حق

xxxxx_xxxxx
پنج شنبه 14 بهمن 1389, 13:13 عصر
سلام،
میشه اینو کد کنید:
salamsalam


سؤال:
برای رشته های یکسان، خروجی یکسانی تولید میکنه؟

joker
پنج شنبه 14 بهمن 1389, 14:50 عصر
بعله ثابت هست.

joker
جمعه 15 بهمن 1389, 12:33 عصر
نمونه فایل دیگر شامل 4تا فایل با ترکیبی از حروف a-z و z-a و 0-9 و 9-0 به ترتیب.

eshpilen
جمعه 15 بهمن 1389, 14:27 عصر
الگوریتم های مدرن و قوی امروزی چند خاصیت مهم دارند. اول اینکه باید همیشه فرض کرد الگوریتم در دسترس همگان است، و امنیت رمز در این حالت نباید خدشه دار شود. یعنی امنیت نباید بر اساس پنهان بودن الگوریتم استوار باشد. اصولا امنیت کافی الگوریتم هایی که مورد بررسی و آزمایش عمومی قرار نگرفته اند برای کارهای مهم به هیچ وجه قابل اتکا نیست.
خب ویژگی های بعدی هم بطور مثال اینست که هیچوقت نباید رمز تولید شده یکسان باشد؛ حتی وقتی که ورودی یکسانی به الگوریتم داده میشود و کلید رمز هم یکسان است. درواقع یک کرکر نباید بتواند از خروجی رمز شده متوجه ارتباط یا یکسان بودن دیتاهای ورودی الگوریتم رمز بشود.
البته ویژگیها و جزییات دیگری هم هستند که بنده حضور ذهن ندارم، ولی فعلا این چند مورد اساسی را بیادم آمد و گفتم.
و موضوع اینست که چه اهمیتی دارد الگوریتم شما چیست و چرا باید وقت و انرژی برای کشف آن صرف کرد؟ البته قصد جسارت ندارم. منظورم اینست که از نظر رمزنگاری این مباحث چندان ارزشی ندارند و قبلا تمام این موارد تحلیل و آزمایش عملی شده اند و به نتایج فعلی که عرض کردم رسیده اند، و دلایل آنهم اگر کمی فکر کنید و مطالعه در زمینهء رمزنگاری داشته باشید روشن و منطقی است.
البته موارد استثنای کوچکی میتواند وجود داشته باشد، اما عموما اینطور است و این ویژگیها ویژگیهایی اساسی هستند. بهرحال این علم تاکنون به این نتایج رسیده است. معمولا هم اگر چیز بیشتری هست به این موارد اضافه میشود، و همچنان این ویژگیها برای بیشتر کاربردها اساسی هستند.

راستی یک نگاهی به این مقاله بکنید که جالب است: http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codeboo k_.28ECB.29
در این بخش مقاله تصویر پنگوئن معروف لینوکس را میبینید که توسط یکی از حالتهای رمزنگاری که ضعف دارد رمز شده. این ضعف اینست که ورودی یکسان، تحت یک کلید ثابت، خروجی رمز یکسانی نیز تولید میکند. همانطور که میبینید، حتی بدون دانستن کلید میتوان اطلاعات مهمی را از این رمز استخراج کرد.

eshpilen
جمعه 15 بهمن 1389, 14:33 عصر
البته ببخشید بنده این مطالب رو در باب رمزنگاری عمومی عرض کردم.
اگر منظور شما از رمزنگاری، تنها محافظت از استفادهء غیرمجاز از برنامه است، این بنظرم فرق میکند. چون در این روش شما هردوی کلید و الگوریتم را میخواهید در دسترس خود برنامه که در دست کاربر است قرار دهید، و بنابراین نیاز دارید یکی یا هردوی آنها را به نحوی پنهان کنید. اما بنظرم درست به همین خاطر هم هست که تمام این روشها بالاخره چه سخت و چه آسان، شکست پذیرند. به دلیل اینکه نیاز دارید کلید و/یا الگوریتم را جلوی چشم کرکر پنهان کنید. درواقع این شکل از رمزنگاری هرگز نمیتواند خیلی امن شمرده شود. حداقل تا امروز!

joker
جمعه 15 بهمن 1389, 14:42 عصر
در اصل یک نرم افزار تجاری هست برای حفاظت از فایلهای مهمی که باید موقع نقل و انتقال امنیتشون تامین باشه حتی در صورت سرقت فیزیکی فایل ، اتفاقی نیفته. که برای تست اینجا یک نمونه از فایلهای رمز شده را قرار دادم
اصل نرم افزار به همراه سخت افزاری هست که نیمی از کلید توی سخت افزاره و نیمی در نرم افزار(با رعایت نکات امنیتی مربوطه ) ، با داشتن هر دو کلید عمل دیکریپت به راحتی انجام میشه ولی زمانی که یکی از کلیدها نباشه ، عملا چیزی جز یک فایل رمز شده در اختیار شخص کرکر نیست.

منتها الگوریتمهای قابل بازگشت دوطرفه که نیازی به brutiforce ندارند ( مثل همین ) بلاخره قابل کشف هستند ( مدت زمانش فقط بسیار طولانی هست :) )، و هدف من تعیین مدت زمان بود که ظاهرا فکر میکنم باید خیالم از بابت امنیت این الگوریتم کمی تا قسمتی راحت باشه ( البته خودم اعتقاد دارم امنیت تضمینی نیست ) ولی میشه به حد قابل قبولی رسوندش.

eshpilen
جمعه 15 بهمن 1389, 14:58 عصر
بنظرم باید الگوریتم خودتون رو برای دیتای خیلی حجیمتر و متنوع و تصادفی تری تست کنید که ببینید آیا با موفقیت به شکل اولیه برمیگرده و یک وقت تداخلی در بازگردانی دو مقدار متفاوت رمز به یک مقدار رمزگشایی شدهء یکسان بوجود نیاد.
ضمنا در شرایط واقعی برای تحلیل میزان امنیت باید از دیتای بیشتری استفاده کرد. ممکنه کسی نتونه با چند بایت دیتا و رمز الگوریتم رو کشف کنه، اما با دیتای خیلی بیشتری شاید ممکن بشه. یا نوع دیگه اینه که ممکنه وقتی کرکر بتونه دیتای دلخواه خودش رو برای رمز شدن بده و مقدار رمز شده رو بگیره، به الگوریتم خیلی راحتتر پی ببره؛ مثلا اگر برنامه در دسترس و کاملا تحت کنترلش باشه و بطور مثال برای تولید و انتقال فایلهایی استفاده میشه که ورودی اونها دست کاربر هست. به این حالت Chosen-plaintext attack (http://en.wikipedia.org/wiki/Chosen-plaintext_attack) گفته میشه. بعضی الگوریتم های ضعیف در برابر این نوع حمله واقعا آسیب پذیر میشن. ضمنا عکس این حمله هم وجود داره: http://en.wikipedia.org/wiki/Chosen-ciphertext_attack
این که دو نفر اینجا کمی تلاش کردن که ملاک نیست. اگر برنامه و دیتای شما واقعا مهم باشه، افراد خبره و با انگیزه و تلاش خیلی بیشتری ممکنه روش کار کنن.
اصولا تحلیل با دیتایی اینقدر کم خودش ناقص هست که نشون میده یک بررسی کامل تخصصی روش انجام نشده.
البته با درنظر گرفتن اینکه احتمالا شما فقط دارید یک روش قفل نرم افزاری میسازید و اونم برای یک نرم افزار سفارشی و غیرعمومی، و اینکه نباید اونقدرها در اهمیتش اغراق کنیم، بنظرم این هشدارها اهمیت عملی خاصی ندارن. ولی خب بنده به این بحثها علاقه دارم چون در زمینهء رمزنگاری مطالعاتی داشتم و بنظرم حیطهء واقعا جالبی هست که روش بحث کم شده و افراد کمی در این زمینه بینش کافی دارن. خیلی ها اصلا نمیدونن این حیطه چقدر گسترده و تخصصی و پیچیده هست؛ فکر میکنن الگوریتم های رمزنگاری معروف هم یه چیزی بر اساس همون تصوری هست که خودشون دارن (یعنی به سادگی چنتا پیچوندن و تغییر و نگاشت و استفاده از فرمولهای عادی ریاضی).
بطور مثال یکی میگفت الگوریتم HASH چون یک تابع هست پس میشه معکوسش هم کرد و از هش به دیتای اولیه رسید.

Securebit
جمعه 15 بهمن 1389, 15:53 عصر
جوکر جان به نظر من این مهم نیست که کلید دوم در قفل یا دانگل باشد و بدون دانگل اجرا نشود چون با داشتن دانگل الگوریتم و کلید در چند دقیقه قابل کشف شدن هست مهمتر از همه دامپ نشدن برنامه از حافظه و جدا نشدن قفل سخت افزاری هست که 98% قفلهای سخت افزاری به این درد مبتلا هستند.

joker
جمعه 15 بهمن 1389, 21:36 عصر
متاسفانه یا خوشبختانه دوستان موفق شدند برش گردونند ، انگار خیلی دیگه باید روش کار کنم :(
http://shabgard.org/forums/showthread.php?p=143498

پیوست :
قفل سخت افزار همون کلیده و چون دست کسی نیست ازاین نظر مشکلی نداره. کسی که این کلید دستش باشه یعنی صاحب اصلی و دامپ هم بکنه عملا مهم نیست ، مال خودشه :)

eshpilen
شنبه 16 بهمن 1389, 08:37 صبح
این الگوریتمی بود ترکیب از rc4 و sha256 که دوام نیاورد
ظاهرا چاره ای ندارم جز رفتن سراغ aes.

RC4 که یک stream cipher هست، درحالیکه AES یک block ciphers هست. این دوتا در دو مقولهء جدا هستن و برای کاربردهای متفاوتی بکار میرن. طرز کارشون فرق میکنه. بنظرم block ciphers ها کلا قوی تر از stream cipher ها هستن. تاجاییکه میدونم از stream cipher ها جایی استفاده میشه که بخوایم دیتایی رو در حین انتقال و به تدریج رمز کنیم (یعنی به تدریج که ارسال میشه در واحدهای خیلی کوچکتر از block ciphers ها رمز میشه).
حالا شما چرا اول RC4 رو انتخاب کردید؟ آیا موارد و شرایط کاربردش رو درنظر داشتید؟
بطور مثال اینو ببینید: http://en.wikipedia.org/wiki/Stream_cipher_attack

Stream ciphers are vulnerable to attack if the same key is used twice (depth of two) or more.

اینطور که نوشته، درمورد stream cipher نباید از یک کلید بیش از یک بار استفاده کنید. درحالیکه درمورد block ciphers ها چنین ضعفی حداقل در این حد وجود نداره.

راستی از sha256 چطور و برای چه منظوری استفاده کردید؟

joker
یک شنبه 17 بهمن 1389, 11:46 صبح
درهردوحالت من از استریم استفاده کرده بودم
البته همون الگوریتم قبلی هم قوی بود ( ضعف شاید 1% داشت ) ولی خب برای رسوندن به نزدیک صفر ، دیگه کلا سویئچ کردم روی AES
چون دیگه تکرارپذیری الگوریتم قبلی را نداره و از کلید رندوم هم استفاده میکنه ، و هیچ دوتا فایلی حتی با محتوی یکسان ، به شکل ثابت و یکسانی رمز نمیشن.
سرعت کار هم بد نیست ، برای فایل 500 مگابایتی حدودا" 40 ثانیه زمان میبره.
یک نمونه ضمیمه کردم.

eshpilen
یک شنبه 17 بهمن 1389, 19:13 عصر
آهان حالا قیافش ابهت رمزنگاری واقعی رو پیدا کرد :چشمک:


البته همون الگوریتم قبلی هم قوی بود ( ضعف شاید 1% داشت )
:متعجب:
کجاش قوی بود دو نفر نگا نگاش کردن زرتی شکسته شد؟

joker
یک شنبه 17 بهمن 1389, 20:32 عصر
نه بابا اونقدرها هم اوضاعش بد نبود :) ظاهرا که برای طولهای کوتاه و مقادیر ثابت ضعیف بود ، برای فایلهای معمولی بیشتر از یک کیلوبایت همچنان قوی محسوب میشه.

Delphi Coder
سه شنبه 19 بهمن 1389, 00:26 صبح
به نظر من اینجا باید بیشتر به فکر امنیت encoder و decoder بود تا الگوریتم. encode کردن دوباره خروجی حالا هر الگوریتمی که استفاده شده باشه برای مبهم کردن قضیه کفاف میده مثلا یه ترکیب ساده مثل استفاده از table و یه سری دستورات برگشت پذیر مثل xor و not و neg و ror و .....
منتها مسئله اینجاست که وقتی encoder و decoder و کلید سخت افزاری رو یکی داشته باشه امکان reverse کردن الگوریتم رو خواهد داشت و به عقیده من بیشتر باید نگران این بود تا صرف خود الگوریتم. اشاره من به مباحثی مثل code morphing و تکنیکهای anti debug مشابه هست.

Nima NT
سه شنبه 19 بهمن 1389, 02:30 صبح
اشاره من به مباحثی مثل code morphing و تکنیکهای anti debug مشابه هست.
میتونه تاثیر داشته باشه زمانی که از نو نوشته بشن و از برنامه های آماده استفاده نشه وگرنه در این صورت همون امنیت رمز نگاری بیشتر جلوه میکنه.