عملکرد هش رمزنگاری

از ویکیپدیا، دانشنامه آزاد
رفتن به ناوبری پرش به جستجو
الگوریتم های امن هش
مفاهیم
توابع هش  · SHA  · DSA
استانداردهای اصلی
SHA-0  · SHA-1  · SHA-2  · SHA-3
یک عملکرد هش رمزنگاری (به ویژه SHA-1 ) در محل کار. یک تغییر کوچک در ورودی (در کلمه "بیش از") خروجی (هضم) را به شدت تغییر می دهد. این به اصطلاح اثر بهمن است .

رمزنگاری تابع هش ( CHF ) یک ریاضی است الگوریتم که نقشه های داده با اندازه دلخواه (اغلب "پیام" نامیده می شود) به یک آرایه کمی از اندازه ثابت ( "مقدار هش"، "هش"، و یا "خلاصه پیام") به این یک تابع یک طرفه است ، یعنی یک تابع است که عملاً غیرممکن است که محاسبه را معکوس یا معکوس کند. [1] در حالت ایده آل ، تنها راه برای یافتن پیامی که یک هش مشخص ایجاد می کند این است که با جستجوی بی رحمانه ورودی های احتمالی را جستجو کنید تا ببینید آیا آنها مطابقت دارند یا از جدول رنگین کمان هش های منطبق استفاده کنید. توابع هش رمزنگاری یک ابزار اساسی رمزنگاری مدرن است.

عملکرد هش رمزنگاری ایده آل دارای ویژگی های اصلی زیر است:

  • این قطعی است ، به این معنی که پیام یکسان همیشه منجر به یک هش یکسان می شود
  • سریع محاسبه مقدار هش برای هر پیام داده شده است
  • تولید پیامی که مقدار هش معینی را تولید می کند غیرممکن است (یعنی فرایند تولید مقدار هش معکوس را معکوس می کند)
  • یافتن دو پیام متفاوت با مقدار هش یکسان غیر ممکن است
  • یک تغییر کوچک در یک پیام باید مقدار هش را آنقدر تغییر دهد که یک مقدار هش جدید بدون ارتباط با مقدار هش قدیمی ( اثر بهمن ) ظاهر شود [2]

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

خواص [ ویرایش ]

اکثر توابع هش رمزنگاری طوری طراحی شده اند که یک رشته از هر طول را به عنوان ورودی گرفته و مقدار هش با طول ثابت را تولید کنند.

یک تابع هش رمزنگاری باید بتواند در برابر همه انواع حملات رمزنگاری شده مقاومت کند . در رمزنگاری نظری ، سطح امنیت یک تابع هش رمزنگاری با استفاده از ویژگی های زیر تعریف شده است:

مقاومت قبل از تصویر
با توجه به مقدار هش h ، یافتن هرگونه پیام m به گونه ای که h = هش ( m ) باشد ، دشوار است . این مفهوم مربوط به یک تابع یک طرفه است . عملکردهایی که فاقد این خاصیت هستند در برابر حملات preimage آسیب پذیر هستند .
دومین مقاومت قبل از تصویر
با توجه به ورودی متر 1 ، آن را باید مشکل باشد برای پیدا کردن یک ورودی های مختلف متر 2 به طوری که هش ( متر 1 ) = هش ( متر 2 ) . گاهی از این ویژگی به عنوان مقاومت ضعیف در برخورد یاد می شود . عملکردهایی که فاقد این ویژگی هستند در برابر حملات تصویر دوم آسیب پذیر هستند .
مقاومت در برابر برخورد
یافتن دو پیام متفاوت m 1 و m 2 به گونه ای که هش ( m 1 ) = هش ( m 2 ) دشوار باشد . به چنین جفتی برخورد هش رمزنگاری می گویند . گاهی از این ویژگی به عنوان مقاومت شدید در برابر برخورد یاد می شود . این مقدار حداقل به دو برابر مقدار مورد نیاز برای مقاومت قبل از تصویر نیاز دارد. در غیر این صورت ممکن است با حمله به روز تولد برخورد شود . [4]

مقاومت در برابر برخورد دومین مقاومت قبل از تصویر را نشان می دهد اما به معنای مقاومت پیش از تصویر نیست. [5] فرض ضعیف تر همیشه در رمزنگاری نظری ترجیح داده می شود ، اما در عمل ، یک تابع هش که تنها دومین عکس از قبل از تصویر مقاوم است ، ناامن تلقی می شود و بنابراین برای کاربردهای واقعی توصیه نمی شود.

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

عملکردی که این معیارها را برآورده می کند ممکن است هنوز دارای خواص نامطلوب باشد. در حال حاضر، محبوب توابع هش رمزنگاری آسیب پذیر هستند طول پسوند حملات : با توجه هش ( متر ) و لن ( متر ) اما نه متر ، با انتخاب یک مناسب متر ، مهاجم می تواند محاسبه هش ( مترمتر ، ) ، که در آن ∥ نشان دهنده الحاق به [6] از این ویژگی می توان برای شکستن طرح های احراز هویت ساده بر اساس توابع هش استفاده کرد. HMAC کار ساخت و ساز در اطراف این مشکلات است.

در عمل ، مقاومت در برابر برخورد برای بسیاری از کاربردهای عملی کافی نیست. علاوه بر مقاومت در برابر برخورد ، ممکن نیست که دشمن بتواند دو پیام با هضم تقریباً مشابه پیدا کند. یا برای استنباط هرگونه اطلاعات مفید در مورد داده ها ، فقط با توجه به خلاصه آنها. به طور خاص ، یک تابع هش باید تا آنجا که ممکن است مانند یک تابع تصادفی رفتار کند (که غالباً در اثبات امنیت اوراکل تصادفی نامیده می شود ) در حالی که هنوز قطعی و کارآمد محاسبه می شود. این امر عملکردهایی مانند تابع SWIFFT را که با فرض اینکه برخی مشکلات روی شبکه های ایده آل از نظر محاسباتی مشکل هستند ، محکم کند ، اما به عنوان یک تابع خطی ، این ویژگی های اضافی را برآورده نمی کند. [7]

الگوریتم های Checksum ، مانند CRC32 و دیگر چک های افزونگی چرخه ای ، برای برآوردن الزامات بسیار ضعیف تر طراحی شده اند و به طور کلی به عنوان توابع هش رمزنگاری نامناسب هستند. به عنوان مثال ، یک CRC برای یکپارچگی پیام در استاندارد رمزگذاری WEP استفاده شد ، اما حمله ای به آسانی کشف شد که از خطی بودن چک چک استفاده می کرد.

درجه سختی [ ویرایش ]

در عمل رمزنگاری ، "دشوار" به طور کلی به معنای "تقریباً مطمئناً خارج از دسترس هر حریفی است که باید تا زمانی که امنیت سیستم مهم تلقی می شود از شکستن سیستم جلوگیری شود". بنابراین معنای این اصطلاح تا حدودی به برنامه بستگی دارد زیرا تلاشی که یک عامل مخرب در انجام این کار می کند معمولاً متناسب با سود مورد انتظار آنها است. با این حال ، از آنجا که تلاش مورد نیاز معمولاً با طول هضم چند برابر می شود ، می توان با افزودن چند ده بیت به دومی ، حتی یک مزیت هزار برابر در قدرت پردازش را خنثی کرد.

برای پیام هایی که از مجموعه محدودی از پیام ها انتخاب شده اند ، به عنوان مثال گذرواژه یا سایر پیام های کوتاه ، می توان با امتحان همه پیام های ممکن در مجموعه ، یک هش را وارونه کرد. از آنجا که توابع هش رمزنگاری به طور معمول برای محاسبه سریع طراحی شده اند ، توابع مشتق کلیدی ویژه ای که به منابع محاسباتی بیشتری نیاز دارند ، ایجاد شده اند که چنین حملات با نیروی بی رحم را دشوارتر می کند.

در برخی از تجزیه و تحلیل نظری "سخت" است به معنی خاص ریاضی، مانند "در قابل حل نیست مجانبی زمان چند جمله ای ". چنین تفسیری از دشواری در مطالعه توابع هش رمزنگاری قابل اثبات مهم است ، اما معمولاً ارتباط قوی با امنیت عملی ندارند. به عنوان مثال ، یک الگوریتم زمان نمایی گاهی اوقات هنوز می تواند به اندازه کافی سریع باشد تا یک حمله امکان پذیر را انجام دهد. در مقابل، یک الگوریتم چندجمله ای (به عنوان مثال، یکی است که نیاز به N 20 گام برای N کلید رقمی) ممکن است بیش از حد کند برای هر گونه استفاده عملی است.

تصویرسازی [ ویرایش ]

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

برنامه های کاربردی [ ویرایش ]

تأیید صحت پیامها و فایلها [ ویرایش ]

یکی از کاربردهای مهم هش های امن تأیید صحت پیام است . مقایسه هضم پیام (هضم هش روی پیام) که قبل و بعد از آن محاسبه شده است ، می تواند تعیین کند که آیا تغییری در پیام یا فایل ایجاد شده است یا خیر .

MD5 ، SHA-1 ، یا SHA-2 هش ها گاهی اوقات در وب سایت ها یا انجمن ها منتشر می شوند تا امکان بررسی صحت فایل های بارگیری شده [8] ، از جمله فایل های بازیابی شده با استفاده از اشتراک گذاری فایل مانند بازتاب ، فراهم شود. این عمل تا زمانی که هش ها در یک سایت قابل اعتماد - معمولاً سایت مبدا - که توسط HTTPS تأیید شده است ، یک زنجیره اعتماد ایجاد می کند . با استفاده از یک هش رمزنگاری و یک زنجیره اعتماد تغییرات مخرب فایل را تشخیص می دهد. سایر کدهای تشخیص خطا مانند بررسی افزونگی چرخه ای فقط از تغییرات غیر مخرب فایل ایجاد شده توسط دیگران جلوگیری می کند.

ایجاد و تأیید امضا [ ویرایش ]

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

تأیید رمز عبور [ ویرایش ]

تأیید رمز عبور معمولاً به هش های رمزنگاری متکی است. در صورت به خطر انداختن کلمه عبور ، ذخیره همه گذرواژه های کاربر به عنوان متن پاک می تواند منجر به نقض امنیتی گسترده شود. یکی از راههای کاهش این خطر این است که فقط هش هر رمز عبور را ذخیره کنید. برای احراز هویت کاربر ، رمز عبور ارائه شده توسط کاربر هش شده و با هش ذخیره شده مقایسه می شود. هنگام هش کردن رمز عبور ، روش بازنشانی رمز عبور مورد نیاز است. گذرواژه های اصلی را نمی توان از مقدار هش ذخیره شده دوباره محاسبه کرد.

توابع استاندارد هش رمزنگاری به گونه ای طراحی شده اند که سریع محاسبه می شوند ، و در نتیجه ، می توان رمزهای عبور حدس زده شده را با نرخ بالایی امتحان کرد. واحدهای پردازش گرافیکی رایج می توانند میلیاردها رمز عبور ممکن را در هر ثانیه امتحان کنند. توابع هش گذرواژه که کشش کلید را انجام می دهند -مانند PBKDF2 ، scrypt یا Argon2- معمولاً از فراخوانی های مکرر یک هش رمزنگاری برای افزایش زمان (و در برخی موارد حافظه کامپیوتر) مورد نیاز برای انجام حملات بی رحمانه بر روی هش هش رمز عبور ذخیره شده استفاده می کنند. هش رمز عبور نیاز به استفاده از نمک تصادفی بزرگ و غیر مخفی داردمقدار قابل ذخیره با هش رمز عبور. نمک خروجی هش گذرواژه را تصادفی می کند و ذخیره یک جدول از رمزهای عبور و مقادیر هش از پیش محاسبه شده را برای دشمن غیرممکن می کند.

خروجی یک تابع هش رمز عبور نیز می تواند به عنوان کلید رمزنگاری استفاده شود. بنابراین هش های رمز عبور به عنوان توابع مشتق کلیدی مبتنی بر رمز عبور (PBKDFs) نیز شناخته می شوند .

اثبات کار [ ویرایش ]

یک سیستم اثبات کار (یا پروتکل ، یا عملکرد) یک اقدام اقتصادی برای جلوگیری از حملات انکار سرویس و سایر سوء استفاده از خدمات مانند هرزنامه در شبکه با نیاز به کار از درخواست کننده سرویس است ، که معمولاً به معنی زمان پردازش توسط یک کامپیوتر. یکی از ویژگیهای کلیدی این طرحها عدم تقارن آنهاست: کار باید نسبتاً سخت (اما امکان پذیر) از طرف درخواست کننده باشد اما برای ارائه دهنده خدمات به راحتی قابل بررسی است. یکی از سیستم های محبوب - مورد استفاده در استخراج بیت کوین و Hashcash-از معکوس های هش جزئی برای اثبات کار انجام شده ، بازکردن پاداش استخراج در بیت کوین و به عنوان یک نشانه حسن نیت برای ارسال یک ایمیل در Hashcash استفاده می کند. فرستنده باید پیامی را پیدا کند که مقدار هش آن با تعداد صفر بیت شروع می شود. میانگین کاری که فرستنده برای یافتن یک پیام معتبر باید انجام دهد ، به تعداد صفر بیت مورد نیاز در مقدار هش نمایی است ، در حالی که گیرنده می تواند اعتبار پیام را با اجرای یک تابع هش واحد تأیید کند. به عنوان مثال ، در Hashcash ، از یک فرستنده خواسته می شود که یک سرصفحه ایجاد کند که مقدار هش SHA-1 160 بیتی آن 20 بیت اول را صفر دارد. به طور متوسط ​​، فرستنده باید 19 بار 2 بار تلاش کند تا یک سرصفحه معتبر پیدا کند.

شناسه فایل یا داده [ ویرایش ]

خلاصه پیام همچنین می تواند به عنوان وسیله ای برای شناسایی قابل اعتماد فایل مورد استفاده قرار گیرد. چندین سیستم مدیریت کد منبع ، از جمله Git ، Mercurial و Monotone ، از sha1sum انواع مختلف محتوا (محتوای فایل ، درختان فهرست ، اطلاعات نسب و غیره) برای شناسایی منحصر به فرد آنها استفاده می کنند. هش ها برای شناسایی پرونده های موجود در شبکه های به اشتراک گذاری فایل های همتا به همتا استفاده می شوند. به عنوان مثال ، در پیوند ed2k ، یک هش متغیر MD4 با اندازه فایل ترکیب شده و اطلاعات کافی برای مکان یابی منابع فایل ، بارگیری فایل و تأیید محتویات آن را ارائه می دهد. پیوندهای مغناطیسیمثال دیگری هستند چنین فایلهای هش اغلب هش بالای لیست هش یا درخت هش هستند که مزایای بیشتری را امکان پذیر می کند.

یکی از اصلی ترین کاربردهای یک تابع هش این است که امکان جستجوی سریع داده ها در یک جدول هش را فراهم کند. توابع هش از نوع خاصی هستند ، توابع هش رمزنگاری نیز به خوبی به این برنامه کمک می کنند.

با این حال ، در مقایسه با توابع هش استاندارد ، توابع هش رمزنگاری از نظر محاسباتی گران تر هستند. به همین دلیل ، آنها معمولاً در زمینه هایی مورد استفاده قرار می گیرند که لازم است کاربران از خود در برابر احتمال جعل (ایجاد داده هایی با همان داده مورد انتظار) توسط شرکت کنندگان بالقوه مخرب محافظت کنند.

توابع هش بر اساس رمزگذاری بلوک [ ویرایش ]

روشهای مختلفی برای استفاده از رمز بلوک برای ایجاد یک تابع هش رمزنگاری وجود دارد ، به ویژه یک تابع فشرده سازی یک طرفه .

روشها شبیه به حالتهای رمزگذاری بلوک هستند که معمولاً برای رمزگذاری استفاده می شوند. بسیاری از توابع هش معروف ، از جمله MD4 ، MD5 ، SHA-1 و SHA-2 ، از اجزای شبیه به رمز طراحی شده اند که برای این منظور طراحی شده اند و با بازخورد اطمینان حاصل می شود که عملکرد حاصله قابل برگشت نیست. فینالیست های SHA-3 شامل توابع با اجزای شبیه به رمز (مانند ، Skein ، BLAKE ) هستند ، اگرچه تابع در نهایت ، Keccak ، به جای اسفنج رمزنگاری ساخته شده است .

به جای این رمزهای بلوک سفارشی ، می توان از رمزنگاری بلوک استاندارد مانند AES استفاده کرد. هنگامی که یک سیستم جاسازی شده نیاز به رمزگذاری و هش با حداقل اندازه کد یا محدوده سخت افزاری دارد ، مفید خواهد بود. با این حال ، این رویکرد می تواند هزینه های کارآیی و امنیت داشته باشد. رمزهای توابع هش برای هش ساخته شده اند: آنها از کلیدها و بلوک های بزرگ استفاده می کنند ، می توانند کلیدها را به طور موثر تغییر دهند و برای مقاومت در برابر حملات کلیدهای مرتبط طراحی و بررسی شده اند.به رمزهای هدف عمومی اهداف طراحی متفاوتی دارند. به طور خاص ، AES دارای اندازه های کلیدی و بلوکی است که استفاده از آنها برای تولید مقادیر طولانی هش را بی اهمیت می کند. هنگامی که کلید هر بلوک را تغییر می دهد ، رمزگذاری AES کمتر کارآمد می شود. و حملات کلیدی مرتبط ، امنیت آن را در استفاده از تابع هش کمتر از رمزگذاری می کند.

طراحی عملکرد هش [ ویرایش ]

ساخت Merkle -Damgård [ ویرایش ]

ساختمان هش Merkle -Damgård

یک تابع هش باید بتواند یک پیام با طول دلخواه را به یک خروجی با طول ثابت پردازش کند. این را می توان با تقسیم ورودی به مجموعه ای از بلوک های با اندازه یکسان و عملکرد متوالی روی آنها با استفاده از یک تابع فشرده سازی یک طرفه به دست آورد . تابع فشرده سازی می تواند به طور خاص برای هش طراحی شود یا از یک رمز بلوک ساخته شود. تابع هش ساخته شده با ساختار Merkle -Damgård به اندازه عملکرد فشرده سازی در برابر برخورد مقاوم است. هرگونه برخورد برای عملکرد هش کامل را می توان در برخورد در تابع فشرده سازی جستجو کرد.

آخرین بلوک پردازش شده نیز باید بدون ابهام طول پر شود . این برای امنیت این ساختمان بسیار مهم است. این ساختمان بنای Merkle -Damgård نامیده می شود . متداول ترین توابع کلاسیک هش ، از جمله SHA-1 و MD5 ، به این شکل هستند.

لوله عریض در مقابل لوله باریک [ ویرایش ]

یک کاربرد مستقیم از ساختار Merkle-Damgård ، که در آن اندازه خروجی هش برابر اندازه حالت داخلی (بین هر مرحله فشرده سازی) است ، منجر به طراحی هش لوله باریک می شود . این طرح باعث ایجاد بسیاری از اشکالات ذاتی می شود ، از جمله طول ، گسترش ، چند حاملگی ، [9] حملات پیام طولانی ، [10] حملات ایجاد و چسباندن ، [ نیاز به نقل قول ] و همچنین نمی توان آنها را موازی کرد. در نتیجه ، توابع هش مدرن بر روی سازه های لوله عریض ساخته می شوند که دارای اندازه داخلی بزرگتری هستند-که از تغییرات در ساختار Merkle-Damgård [9] گرفته تا سازه های جدید مانند ساخت اسفنجی متغیر است.و ساخت و ساز HAIFA . [11] هیچ یک از شرکت کنندگان در مسابقه عملکرد NIST از یک سازه کلاسیک Merkle -Damgård استفاده نمی کنند. [12]

در همین حال ، کاهش خروجی یک هش طولانی تر ، مانند مورد استفاده در SHA-512/256 ، همچنین بسیاری از این حملات را شکست می دهد. [13]

استفاده در ساخت دیگر بدوی رمزنگاری [ ویرایش ]

از توابع Hash می توان برای ساخت دیگر بدوی رمزنگاری استفاده کرد. برای اینکه این بدویان دیگر از نظر رمزنگاری ایمن باشند ، باید به درستی آنها را ساخت.

کدهای احراز هویت پیام (MAC) (که به آنها توابع هش کلیدی نیز گفته می شود) اغلب از توابع هش ساخته می شوند. HMAC چنین MAC است.

همانطور که می توان از رمزهای بلوک برای ساخت توابع هش استفاده کرد ، توابع هش نیز می توانند برای ایجاد رمزهای بلوک استفاده شوند. اگر عملکرد هش زیربنایی ایمن باشد ، سازه های Luby-Rackoff با استفاده از توابع هش می توانند به طور قابل اثبات ایمن شوند. همچنین ، بسیاری از توابع هش (از جمله SHA-1 و SHA-2 ) با استفاده از رمزنگاری بلوک مخصوص در دیویس-مایر یا سایر سازه ها ساخته می شوند. این رمز همچنین می تواند در حالت عملکرد معمولی ، بدون ضمانت های امنیتی مشابه استفاده شود. به SHACAL ، خرس و شیر مراجعه کنید .

تولیدکنندگان اعداد شبه تصادفی (PRNGs) می توانند با استفاده از توابع هش ساخته شوند. این کار با ترکیب یک دانه (مخفی) تصادفی با یک شمارنده و هش کردن آن انجام می شود.

Some hash functions, such as Skein, Keccak, and RadioGatún, output an arbitrarily long stream and can be used as a stream cipher, and stream ciphers can also be built from fixed-length digest hash functions. Often this is done by first building a cryptographically secure pseudorandom number generator and then using its stream of random bytes as keystream. SEAL is a stream cipher that uses SHA-1 to generate internal tables, which are then used in a keystream generator more or less unrelated to the hash algorithm. SEAL is not guaranteed to be as strong (or weak) as SHA-1. Similarly, the key expansion of the رمزهای جریان HC-128 و HC-256 از عملکرد هش SHA-256 استفاده زیادی می کنند.

الحاق [ ویرایش ]

الحاق خروجی ها از چندین توابع هش ، مقاومت در برابر برخورد را به خوبی قوی ترین الگوریتم های موجود در نتیجه ترکیب شده ، ارائه می دهد. [ به عنوان مثال نیاز است ] برای مثال ، نسخه های قدیمی تر امنیت لایه حمل و نقل (TLS) و لایه سوکت امن (SSL) از مبالغ MD5 و SHA-1 متصل استفاده می کردند. [14] [15] این اطمینان می دهد که روشی برای یافتن برخورد در یکی از توابع هش داده های محافظت شده توسط هر دو تابع هش را شکست نمی دهد. [ نیازمند منبع ]

For Merkle–Damgård construction hash functions, the concatenated function is as collision-resistant as its strongest component, but not more collision-resistant.[citation needed] Antoine Joux observed that 2-collisions lead to n-collisions: if it is feasible for an attacker to find two messages with the same MD5 hash, then they can find as many additional messages with that same MD5 hash as they desire, with no greater difficulty.[16] Among those n messages with the same MD5 hash, there is likely to be a collision in SHA-1. The additional work needed to find the SHA-1 collision (beyond the exponential birthday search) requires only polynomial timeبه [17] [18]

الگوریتم های هش رمزنگاری [ ویرایش ]

الگوریتم های هش رمزنگاری زیادی وجود دارد. این بخش چند الگوریتم را فهرست می کند که نسبتاً اغلب به آنها اشاره می شود. لیست گسترده تری را می توانید در صفحه ای مشاهده کنید که حاوی مقایسه عملکردهای هش رمزنگاری است .

MD5 [ ویرایش ]

MD5 توسط رونالد ریوست در سال 1991 برای جایگزینی تابع هش قبلی ، MD4 ، طراحی شد و در سال 1992 به عنوان RFC 1321 مشخص شد. برخوردها با MD5 را می توان در عرض چند ثانیه محاسبه کرد که این الگوریتم را برای اکثر مواردی که نیاز به هش رمزنگاری دارند ، نامناسب می کند. MD5 خلاصه 128 بیت (16 بایت) تولید می کند.

SHA-1 [ ویرایش ]

SHA-1 به عنوان بخشی از پروژه Capstone دولت ایالات متحده توسعه یافت. مشخصات اصلی-که اکنون معمولاً SHA-0 نامیده می شود-این الگوریتم در سال 1993 تحت عنوان Secure Hash Standard، FIPS PUB 180 توسط آژانس استانداردهای دولتی ایالات متحده NIST (موسسه ملی استاندارد و فناوری) منتشر شد. NSA بلافاصله پس از انتشار آن را پس گرفت و نسخه تجدید نظر شده ، که در 1995 در FIPS PUB 180-1 منتشر شد و معمولاً SHA-1 تعیین شده بود ، جایگزین شد. برخورد با الگوریتم کامل SHA-1 را می توان با استفاده از حمله خرد شده ایجاد کرد و عملکرد هش باید شکسته در نظر گرفته شود. SHA-1 هضم هش 160 بیت (20 بایت) تولید می کند.

ممکن است اسناد به SHA-1 فقط به عنوان "SHA" اشاره کنند ، اگرچه ممکن است با سایر الگوریتم های Secure Hash مانند SHA-0 ، SHA-2 و SHA-3 در تضاد باشد.

RIPEMD-160 [ ویرایش ]

RIPEMD (RACE Integrity Primitives Evaluation Message Digest) خانواده ای از توابع هش رمزنگاری است که در لوون بلژیک توسط Hans Dobbertin ، Antoon Bosselaers و Bart Preneel در گروه تحقیقاتی COSIC در Katholieke Universiteit Leuven توسعه داده شد و برای اولین بار در سال 1996 منتشر شد. RIPEMD بر اساس اصول طراحی مورد استفاده در MD4 بود و از نظر عملکرد شبیه SHA-1 محبوب تر است. با این حال ، RIPEMD-160 شکسته نشده است. همانطور که از نامش مشخص است ، RIPEMD-160 یک هش هش 160 بیت (20 بایت) تولید می کند.

گرداب [ ویرایش ]

Whirlpool یک تابع هش رمزنگاری است که توسط Vincent Rijmen و Paulo SLM Barreto طراحی شده است و اولین بار آن را در سال 2000 توصیف کردند. Whirlpool بر اساس نسخه قابل ملاحظه ای اصلاح شده از استاندارد پیشرفته رمزگذاری (AES) است. Whirlpool یک هش 512 بیت (64 بایت) تولید می کند.

SHA-2 [ ویرایش ]

SHA-2 (Secure Hash Algorithm 2) مجموعه ای از توابع هش رمزنگاری است که توسط آژانس امنیت ملی ایالات متحده (NSA) طراحی شده است ، اولین بار در سال 2001 منتشر شد. آنها با استفاده از ساختار Merkle-Damgård ، از یک تابع فشرده سازی یک طرفه ساخته شده اند. خود با استفاده از ساختار دیویس -مایر از رمزگذاری بلوک تخصصی (طبقه بندی شده) ساخته شده است.

SHA-2 اساساً از دو الگوریتم هش تشکیل شده است: SHA-256 و SHA-512. SHA-224 یک نوع SHA-256 با مقادیر شروع متفاوت و خروجی کوتاه است. SHA-384 و SHA-512/224 و SHA-512/256 که کمتر شناخته شده اند ، همه انواع SHA-512 هستند. SHA-512 از SHA-256 ایمن تر است و معمولاً سریعتر از SHA-256 در دستگاه های 64 بیتی مانند AMD64 است .

اندازه خروجی در بیت با پسوند نام "SHA" داده می شود ، بنابراین SHA-224 دارای اندازه خروجی 224 بیت (28 بایت) است. SHA-256 ، 32 بایت ؛ SHA-384 ، 48 بایت ؛ و SHA-512 ، 64 بایت.

SHA-3 [ ویرایش ]

SHA-3 (الگوریتم امن هش 3) توسط NIST در 5 آگوست 2015 منتشر شد. SHA-3 زیرمجموعه ای از خانواده اولیه اولیه رمزنگاری Keccak است. الگوریتم Keccak کار Guido Bertoni ، Joan Daemen ، Michael Peeters و Gilles Van Assche است. Keccak بر اساس ساختار اسفنجی ساخته شده است که می تواند برای ساخت دیگر بدوی رمزنگاری مانند رمز جریان نیز مورد استفاده قرار گیرد. SHA-3 اندازه خروجی مشابه SHA-2 را ارائه می دهد: 224 ، 256 ، 384 و 512 بیت.

اندازه های خروجی قابل تنظیم را می توان با استفاده از توابع SHAKE-128 و SHAKE-256 بدست آورد. در اینجا پسوندهای -128 و -256 به نام نشان دهنده قدرت امنیتی تابع هستند تا اندازه خروجی در بیت.

BLAKE2 [ ویرایش ]

BLAKE2 ، نسخه بهبود یافته BLAKE ، در 21 دسامبر 2012 اعلام شد. توسط Jean-Philippe Aumasson ، Samuel Neves ، Zooko Wilcox-O'Hearn و Christian Winnerlein با هدف جایگزینی MD5 پرکاربرد ، اما شکسته و الگوریتم های SHA-1 هنگامی که بر روی معماری 64 بیتی x64 و ARM اجرا می شود ، BLAKE2b سریعتر از SHA-3 ، SHA-2 ، SHA-1 و MD5 است. اگرچه BLAKE و BLAKE2 به عنوان SHA-3 استاندارد نشده اند ، BLAKE2 در بسیاری از پروتکل ها از جمله هش رمز عبور Argon2 ، به دلیل کارایی بالایی که در CPU های مدرن ارائه می دهد ، استفاده شده است. همانطور که BLAKE نامزد SHA-3 بود ، BLAKE و BLAKE2 هر دو اندازه خروجی مشابه SHA-3 را ارائه می دهند-از جمله اندازه خروجی قابل تنظیم.

BLAKE3 [ ویرایش ]

BLAKE3, an improved version of BLAKE2, was announced on January 9, 2020. It was created by Jack O'Connor, Jean-Philippe Aumasson, Samuel Neves, and Zooko Wilcox-O'Hearn. BLAKE3 is a single algorithm, in contrast to BLAKE and BLAKE2, which are algorithm families with multiple variants. The BLAKE3 compression function is closely based on that of BLAKE2s, with the biggest difference being that the number of rounds is reduced from 10 to 7. Internally, BLAKE3 is a Merkle tree, and it supports higher degrees of parallelism than BLAKE2.

Attacks on cryptographic hash algorithms[edit]

لیست بلندی از توابع هش رمزنگاری وجود دارد اما بسیاری از آنها آسیب پذیر هستند و نباید از آنها استفاده کرد. به عنوان مثال ، NIST 51 عملکرد هش [19] را به عنوان نامزد دور 1 مسابقه هش SHA-3 انتخاب کرد ، از این تعداد 10 مورد شکست خورده و 16 مورد ضعف قابل توجهی را نشان داد و بنابراین به دور بعدی نرسید. اطلاعات بیشتر را می توانید در مقاله اصلی در مورد مسابقات عملکرد NIST پیدا کنید .

حتی اگر عملکرد هش هرگز شکسته نشده باشد ، حمله موفق به یک نوع تضعیف شده می تواند اعتماد متخصصان را تضعیف کند. به عنوان مثال ، در آگوست 2004 برخوردها در چندین تابع هش محبوب از جمله MD5 یافت شد. [20] این ضعف ها امنیت الگوریتم های قوی تر ناشی از توابع ضعیف هش را زیر سوال می برد-به ویژه SHA-1 (نسخه تقویت شده SHA-0) ، RIPEMD-128 و RIPEMD-160 (هر دو نسخه تقویت شده RIPEMD ) [21]

On August 12, 2004, Joux, Carribault, Lemuel, and Jalby announced a collision for the full SHA-0 algorithm.[16] Joux et al. accomplished this using a generalization of the Chabaud and Joux attack. They found that the collision had complexity 251 and took about 80,000 CPU hours on a supercomputer with 256 Itanium 2 processors – equivalent to 13 days of full-time use of the supercomputer.[citation needed]

در فوریه 2005 ، حمله ای به SHA-1 گزارش شد که در حدود 2 69 عملیات هشینگ با هم برخورد می کند ، به جای 2 80 مورد انتظار برای عملکرد هش 160 بیتی. در آگوست 2005 ، حمله دیگری به SHA-1 گزارش شد که در 2 63 عملیات برخورد می کند. سایر نقاط ضعف نظری SHA-1 شناخته شده است: [22] [23] و در فوریه 2017 گوگل از برخورد در SHA-1 خبر داد. [24] محققان امنیتی توصیه می کنند که برنامه های جدید می توانند با استفاده از اعضای بعدی خانواده SHA ، مانند SHA-2 یا استفاده از تکنیک هایی مانند هش تصادفی [1] که نیازی به مقاومت در برابر برخورد ندارند ، از این مشکلات جلوگیری کنند .

A successful, practical attack broke MD5 used within certificates for Transport Layer Security in 2008.[25]

Many cryptographic hashes are based on the Merkle–Damgård construction. All cryptographic hashes that directly use the full output of a Merkle–Damgård construction are vulnerable to length extension attacks. This makes the MD5, SHA-1, RIPEMD-160, Whirlpool, and the SHA-256 / SHA-512 hash algorithms all vulnerable to this specific attack. SHA-3, BLAKE2, BLAKE3, and the truncated SHA-2 variants are not vulnerable to this type of attack.[citation needed]

Attacks on hashed passwords[edit]

استفاده رایج از هش ها ذخیره داده های احراز هویت رمز عبور است. به جای ذخیره متن ساده رمزهای عبور کاربر ، یک سیستم دسترسی کنترل شده هش رمز عبور هر کاربر را در یک فایل یا پایگاه داده ذخیره می کند. وقتی شخصی درخواست دسترسی می کند ، رمز عبوری که ارسال می کند هش شده و با مقدار ذخیره شده مقایسه می شود. اگر پایگاه داده سرقت شود (یک اتفاق بسیار مکرر [26] ) ، دزد فقط مقادیر هش را دارد ، نه گذرواژه ها.

با این حال ، اکثر مردم رمزهای عبور را به روش های قابل پیش بینی انتخاب می کنند. لیست رمزهای عبور رایج به طور گسترده ای در حال انتشار است و بسیاری از گذرواژه ها به اندازه کافی کوتاه هستند که در صورت استفاده از هش های سریع می توان همه ترکیبات ممکن را آزمایش کرد. [27] استفاده از نمک رمزنگاری از برخی حملات مانند ایجاد پرونده های پیش محاسبه مقادیر هش مانند جدول رنگین کمان جلوگیری می کند . اما جستجوهای با سرعت 100 میلیارد آزمایش در ثانیه با پردازنده های گرافیکی سطح بالا امکان پذیر است که حملات مستقیم را حتی با نمک امکان پذیر می کند. [28] [29] موسسه ملی استانداردها و فناوری ایالات متحده توصیه می کند که گذرواژه ها را با استفاده از هش های مخصوص به نام توابع کلید مشتق ذخیره کنید. (KDFs) that have been created to slow brute force searches.[30]:5.1.1.2 Slow hashes include pbkdf2, bcrypt, scrypt, argon2, Balloon and some recent modes of Unix crypt. For KSFs that perform multiple hashes to slow execution, NIST recommends an iteration count of 10,000 or more.[30]:5.1.1.2

See also[edit]

مراجع [ ویرایش ]

نقل قول ها [ ویرایش ]

  1. ^ a b شای هالوی و هوگو کراوچیک ، هش تصادفی و امضای دیجیتال
  2. ^ الکواری ، سیف ؛ داونپورت ، جیمز اچ. بردفورد ، راسل جی (2011). "توابع هش رمزنگاری: روندهای اخیر طراحی و مفاهیم امنیتی" . بایگانی ePrint رمزنگاری . گزارش 2011/565.
  3. ^ اشنایر ، بروس . "رمزنگاری MD5 و SHA: زمان یک استاندارد جدید" . از Computer World . بایگانی شده از نسخه اصلی در 2016-03-16 . بازیابی شده 2016-04-20 . توابع هش یک طرفه بسیار بیشتر از الگوریتم های رمزنگاری ، اسب کار رمزنگاری مدرن هستند.
  4. ^ Katz & Lindell 2014 ، صص 155-157 ، 190 ، 232.
  5. ^ Rogaway & Shrimpton 2004 ، در Sec. 5. دلالتها.
  6. ^ دوونگ ، تایلندی ؛ ریزو ، جولیانو. "آسیب پذیری جعل امضای API فلیکر" .
  7. ^ لیوباشفسکی و همکاران 2008 ، صص 54-72.
  8. ^ پرین، چاد (دسامبر 5، 2007). "از هش های MD5 برای تأیید بارگیری نرم افزار استفاده کنید" . TechRepublic . بازیابی شده در 2 مارس 2013 .
  9. ^ a b Lucks، Stefan (2004). "اصول طراحی توابع هش تکرار شونده" . بایگانی ePrint رمزنگاری . گزارش 2004/253.
  10. ^ کلسی و اشنایر 2005 ، صص 474–490.
  11. ^ بیهام ، الی ؛ دانکلمن ، اور (24 آگوست 2006). چارچوبی برای توابع هش تکراری - HAIFA . دومین کارگاه رمزنگاری NIST رمزنگاری. بایگانی ePrint رمزنگاری . گزارش 2007/278.
  12. ^ ناندی و پل 2010 .
  13. ^ دوبرونیگ ، کریستوف ؛ ایکلسدر ، ماریا ؛ مندل ، فلوریان (فوریه 2015). ارزیابی امنیتی SHA-224 ، SHA-512/224 ، و SHA-512/256 (PDF) (گزارش).
  14. ^ مندل و همکاران ، پ. 145: پیوند دادن ... اغلب توسط مجریان برای "پوشش شرط بندی" در توابع هش استفاده می شود. ترکیبی از فرم MD5
  15. ^ هارنیک و همکاران 2005 ، ص. 99: الحاق توابع هش همانطور که در TLS پیشنهاد شده است ... به همان اندازه تضمین شده است که نامزد ایمن باقی بماند.
  16. ^ a b Joux 2004 .
  17. ^ فینی، هال (20 اوت 2004). "مشکلات بیشتر با توابع هش" . لیست پستی رمزنگاری . بایگانی شده از نسخه اصلی در 9 آوریل 2016 . بازبینی شده در 25 مه 2016 .
  18. ^ هوچ و شمیر 2008 ، صص 616-630.
  19. ^ اندرو رگنشاید ، ری پرلنر ، شو جن چانگ ، جان کلسی ، مریدول نندی ، سورادیوتی پل ، گزارش وضعیت در دور اول مسابقه الگوریتم رمزگذاری SHA-3 رمزنگاری
  20. ^ XiaoyunWang ، Dengguo Feng ، Xuejia Lai ، Hongbo Yu ، Collisions for Hash Functions MD4 ، MD5 ، HAVAL-128 و RIPEMD
  21. ^ الشایخلی ، عماد فخری ؛ احمد ، محمد عبدالطیف (2015) ، "عملکرد هش رمزنگاری" ، کتاب راهنمای تحقیقات در مورد تشخیص تهدیدها و اقدامات مقابله ای در امنیت شبکه ، IGI Global ، صص 80-94 ، doi : 10.4018/978-1-4666-6583-5.ch006 10.4018/978-1 ، شابک 978-1-4666-6583-5
  22. ^ Xiaoyun Wang ، Yiqun Lisa Yin ، و Hongbo Yu ، در حال یافتن برخورد در SHA-1 کامل
  23. ^ بروس اشنایر، تحلیل رمز از SHA-1 (خلاصه وانگ و همکاران نتایج و پیامدهای آن)
  24. ^ فاکس بروستر ، توماس. "گوگل فقط یک الگوریتم رمزنگاری قدیمی را" خراب کرد " - در اینجا به این دلیل است که برای امنیت وب بزرگ است" . فوربس . بازیابی شده 2014-02-24 .
  25. ^ الکساندر سوتیروف ، مارک استیونز ، جیکوب اپلباوم ، آرین لنسترا ، دیوید مولنار ، داگ آرن اسویک ، بن د وگر ، MD5 امروزه مضر تلقی می شوند: ایجاد گواهی CA سرکش ، دسترسی به 29 مارس 2009.
  26. ^ Swinhoe، دن (17 آوریل، 2020). "15 بزرگترین نقض داده در قرن 21" . مجله CSO.
  27. ^ Goodin، دن (2012/12/10). "خوشه 25-GPU هر گذرواژه استاندارد ویندوز را در کمتر از 6 ساعت خراب می کند" . Ars Technica . بازیابی شده 2020-11-23 .
  28. ^ کلابورن ، توماس (14 فوریه 2019). "از گذرواژه NTLM ویندوز 8 کارتری استفاده کنید؟ این کار را نکنید. هر کدام را می توان در کمتر از 2.5 ساعت شکست . " www.theregister.co.uk . بازیابی شده 2020-11-26 .
  29. ^ "عملکرد GPU فوق العاده" . Improsec 3 ژانویه 2020.
  30. ^ a b Grassi Paul A. (ژوئن 2017). SP 800-63B-3-راهنمای هویت دیجیتال ، احراز هویت و مدیریت چرخه عمر . NIST doi : 10.6028/NIST.SP.800-63b .

منابع [ ویرایش ]

پیوندهای خارجی [ ویرایش ]