PDA

View Full Version : سوال: در مورد اصطلاحات رمزنگاری



saeedgharedaghi
شنبه 16 بهمن 1389, 14:02 عصر
سلام خدمت اساتید عزیز
اگه میشه اصطلاحات زیر را که درباره رمزنگاری است توضیح دهید و بگید چه کاربردی دارد ؟
(فکر کنم برای تازه کارها هم خوب باشد)





1.Cipher Text


2.passPhrase


3.Salt Value


4.password Iterations


5.IV or Initializtion Vector


6.CBC


7.CFB


8.CTS


9.ECB


10.OFB



5 تا آخر مربوط به Cipher Mode است.

eshpilen
یک شنبه 17 بهمن 1389, 20:21 عصر
Cipher Text به رمز تولید شده گفته میشه. یعنی خروجی الگوریتم رمزگذاری. دیتای رمزی.

passPhrase به عبارتهایی میگن که برای رمزگذاری و رمزگشایی انتخاب میشن. بطور مثال کسی میتونه عبارت I have a red car parked in the corner رو بعنوان عبارت رمز خودش استفاده کنه. یعنی یه چیزی مثل پسورد. منتها passPhrase بصورت عبارات و جملات هستن و اگر خوب و بقدر کافی طولانی انتخاب بشن، امنیت اونها بالاتر از پسوردهای معمولی هست در عین اینکه خوب به یاد میمونن.
البته در منابع شرح الگوریتم ها و کدهای مثال ممکنه passPhrase با معنای کم و بیش یکسانی با Password بکار رفته باشه.

Salt Value هم در مورد HASH کردن معمولا منظور هست که مقدار تصادفی ای هست که به ورودی و مراحل HASH افزوده میشه، یعنی با دیتای اصلی آمیخته میشه. علت کاربردش این هست که از Dictionary attack و حملات مشابه جلوگیری بکنه. یعنی کرکر نمیتونه هش عبارات متداول رو پیشاپیش محاسبه و ذخیره بکنه و از اون برای کشف هر تعداد عبارت اولیه که هش اونها رو دریافت میکنه استفاده بکنه؛ چون هر عبارت اولیه با یک Salt تصادفی رمز شده و هش اونهم باید با همون salt محاسبه بشه. salt چیز مخفی ای مثل پسورد نیست و همراه با خروجی هش ذخیره میشه، چون موقع محاسبهء مجدد هش یک عبارت ورودی، مورد نیاز هست.

درمورد password Iterations هم Context اون چی بوده؟ واضح نیست و یادم نمیاد در چه موردی هست.

IV or Initializtion Vector یک بلاک از دیتای اولیهء رندوم هست که در الگوریتم های رمزنگاری بکار میره و هم باعث بکار افتادن اولین مرحلهء الگوریتم میشه و هم باعث اینکه دو دیتای ورودی یکسان حتی تحت یک کلید یکسان هیچوقت خروجی رمز یکسانی تولید نمیکنن که توسط کرکر قابل تشخیص باشه.
الگوریتمهای رمزنگاری در دورهای دوم و سوم و ... وقتی میخوان بلاکی از دیتا رو رمز بکنن، بطور مثال اون رو در مرحله ای از رمزگذاری با خروجی رمز شدهء بلاک قبلی ترکیب میکنن تا به این روش هرگونه الگو و شباهت در بخشهای مختلف دیتا از بین بره و خروجی تصادفی بنظر برسه. برای بلاک اول که بلاکی قبل از اون رمز نشده که خروجیش رو به الگوریتم بدیم، از یک بلاک از دیتای تصادفی استفاده میکنیم که بهش Initializtion Vector گفته میشه. Initializtion Vector برای رمزگشایی مورد نیاز هست و در خود دیتای رمز خروجی ذخیره میشه و در معرض دید همگان، منجمله کرکرها، هست اما نمیتونن ازش سوء استفاده بکنن و فقط باعث میشه نتونن به الگو و یکسان بودن دیتاهای رمز شدهء مختلف پی ببرن.

CBC - Cipher-block chaining: یکی از متداول ترین و معروف ترین روشهای کارکرد الگوریتم های Block cipher که جزو امن ترین اونها هم هست میباشد. طرز کارش درواقع همون هست که درمورد جواب بالا دربارهء Initializtion Vector توضیح داده شد. یعنی استفاده از خروجی رمز بلاک قبلی در مراحل رمزگذاری بلاک بعدی.

CFB یا Cipher feedback هم یک Mode دیگر هست که باعث میشه یک block cipher به یکstream cipher تبدیل بشه. طرز کار CFB شباهت زیادی با CBC داره. برای جزییاتش هم باید به الگوریتم و جزییات فنی مراجعه کنید. نمیشه با یکی دو خط و بدون مراجعه و مطالعهء دقیق مجدد توضیح داد.

CTS یا ciphertext stealing یک روش هست که باعث میشه نیازی نباشه طول دیتای ورودی یک الگوریتم رمزگذاری از نوع block cipher حتما مضرب کاملی از طول بلاک الگوریتم باشه. بازهم برای جزییات مطالعهء دقیق الگوریتم مورد نیاز هست.
بعنوان توضیحات بیشتر باید بگم که مثلا یک block cipher که روی بلاک هایی با طول 128 بیت کار میکنه بطور معمول نیاز داره که طول دیتای ورودی حتما بر 128 تقسیم پذیر باشه. بنابراین به انتهای دیتاهایی که طولشون مضرب کاملی از 128 نیست، بایتهای غیر داده ای اضافه میشن (میتونه یا بسته به الگوریتم ممکنه نیاز باشه بایتهایی تولید شده بصورت تصادفی باشه) و در نتیجه تعداد بایتهای رمز خروجی هم به همین میزان از تعداد بایتهای دیتای اصلی بیشتر خواهد بود. CTS کاری میکنه که نیازی به این Padding دیتای ورودی نباشه و رمز خروجی هم طولش دقیقا برابر با دیتای اولیه خواهد بود. البته به این خاطر الگوریتم در کل مقداری پیچیده تر میشه و بنابراین در خیلی جاها هم بکار نمیره چون لزوما نیازی نیست.

ECB یا Electronic codebook یک Mode رمزگذاری الگوریتمهای block cipher هست که در اون هر بلاک از دیتا بصورت مستقل از بلاکهای دیگر رمزگذاری میشه و مثلا مثل حالت CBC از رمز تولید شدهء بلاکهای قبلی در ایجاد آنتروپی در بلاکهای بعدی استفاده نمیشه. بنابراین این روش ضعیف هست و الگوهای دیتا رو پنهان نمیکنه. بطور مثال دو بلاک 128 بیتی که هر دو محتوی دیتای یکسانی باشن، رمز خروجی یکسانی هم تولید میکنن که باعث میشه کرکر بتونه الگوهای دیتا رو در رمز خروجی تشخیص بده. یعنی مثلا میفهمه که دو قسمت مختلف از فایل رمز شده یکسان بودن و غیره. بنابراین این روش ناامن هست و امروزه معمولا ازش استفاده نمیشه.

OFB یا Output feedback هم یک Mode دیگر هست که یک block cipher رو به یک stream cipher تبدیل میکنه. بازهم برای جزییات باید خود الگوریتم رو مطالعه کنید و بنده هم حضور ذهن ندارم. این مطالب کاملا تخصصی هست و بصورت کلی و کوتاه نمیشه همه چیزشون رو بیان کرد.

در پایان باید اشاره کنیم که هرکدوم از این Mode ها خواص ویژهء خودشون رو دارن. بطور مثال از نظر block cipher بودن یا stream cipher بودن دیدید که تفاوت میکنن. دو مرحلهء رمزگذاری و رمزگشایی در هر یک از این حالتها میتونن یکسان یا متفاوت باشن از نظر الگوریتم؛ یعنی مثلا از همون الگوریتمی که در رمزگذاری استفاده شده عینا بشه با دادن ورودی رمز شده (و احتمالا در بعضی موارد با کمی تغییرات و ترفندها) دوباره دیتای اولیه رو گرفت یا نه. بعضی از این روشها رو میشه با استفاده از پردازش موازی انجام داد یا حداقل بخشهایی از اونها رو بصورت موازی انجام داد. یعنی مثلا دیتایی رو که میخوایم رمز کنیم به بلاک های 128 بیتی تقسیم کنیم و هر بلاک بصورت همزمان بتونه روی یک CPU رمز بشه یا حداقل بخشی از پردازش هر بلاک بتونه بصورت همزمان و موازی انجام بشه؛ این کار در بعضی Mode ها امکان پذیر هست و در بعضی Mode های دیگه امکان پذیر نیست (مثلا در CBC امکان پذیر نیست، چون برای رمز کردن هر بلاک به خروجی رمز بلاک قبلی نیاز داریم). ضمنا تاجایی که یادمه خواص مرحلهء رمزگذاری و رمزگشایی یک Mode میتونن متفاوت باشن. بنابراین هر Mode ای مزایا و معایبی داره و یک جایی ممکنه مناسب باشه. بطور مثال امکان پردازش موازی در بعضی جاها مهم هست و برای رمزگذاری و/یا رمزگشایی داده های خیلی حجیم ممکنه حیاتی بشه. یک جایی ممکنه نیاز به سرعت زیاد در رمزگذاری داشته باشیم یا اینکه بتونیم این مرحله رو بصورت موازی انجام بدیم، یا ممکنه بعکس سرعت بیشتر یا امکان پردازش موازی در مرحلهء رمزگشایی بیشتر مورد نیاز باشه.
بدیهی هست که از نظر امنیت و سرعت و غیره، هرکدوم از این حالتها کم و بیش متفاوت هستن.

saeedgharedaghi
یک شنبه 17 بهمن 1389, 21:26 عصر
خیلی ممنون از توضیح جامعتون

saeedgharedaghi
دوشنبه 18 بهمن 1389, 12:00 عصر
:تشویق::تشویق::تشویق:
استاد گرامی
pdf فارسی مربوط به مطالب بالا وجود دارد اگه وجود دارد خواهشا لینکشو بزارید.

eshpilen
دوشنبه 18 بهمن 1389, 15:12 عصر
ندیدم و فکر نمیکنم وجود داشته باشه.
البته در سطح کلی همین توضیحات شاید چیزی باشه؛ اما کامل و عمیق تخصصی بخواید فکر نمیکنم هیچ منبع فارسی ای موجود باشه.
اگر شما چیزی پیدا کردید لطفا به بنده هم اطلاع بدید.