<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Reza Asadi</title>
        <link>https://virgool.io/feed/@rezaasadi75</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-10 13:06:19</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/48467/avatar/dkNv4F.png?height=120&amp;width=120</url>
            <title>Reza Asadi</title>
            <link>https://virgool.io/@rezaasadi75</link>
        </image>

                    <item>
                <title>نحوه خواندن و نوشتن فایل اکسل در برنامه بهینه سازی GAMS</title>
                <link>https://virgool.io/@rezaasadi75/%D9%86%D8%AD%D9%88%D9%87-%D8%AE%D9%88%D8%A7%D9%86%D8%AF%D9%86-%D9%88-%D9%86%D9%88%D8%B4%D8%AA%D9%86-%D9%81%D8%A7%DB%8C%D9%84-%D8%A7%DA%A9%D8%B3%D9%84-%D8%AF%D8%B1-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D8%A8%D9%87%DB%8C%D9%86%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-gams-j244d4phyjuh</link>
                <description>مقدمهنرم افزار GAMS ابزاری تخصصی جهت حل مدل های ریاضی هست که به دنبال بهینه کردن اهداف خود با توجه به محدودیت هایی که هر تصمیم گیری با آن مواجه است، همچون محدودیت سرمایه، مواد اولیه، انرژی مصرفی، زمان اتمام، نیروی کار و غیره می باشد. نرم افزار GAMS به عنوان یک ابزار قدرتمند و فراگیر برای حل مدل های ریاضی حتی در ابعاد بزرگ روز به روز نقش پررنگ تری در رشته های مهندسی ایفا می کند، یعنی هر جا نیاز به تصمیم گیری بهینه با محدودیت زمان، هزینه و منابع داشته باشیم باید از مدل سازی ریاضی استفاده کرده که GAMS از ابزارهای بسیار کارآمد حل این نوع مدل ها است.(GDX) GAMS Data eXchangeامکانات GDX ویژگی های اساسی را برای تبادل داده های GAMS مانند خواندن و نوشتن فراهم می کند. علاوه بر این امکانات ، تعدادی ابزار GDX برای تبادل داده بین GAMS و سایر منابع داده و همچنین برای انجام عملیات خاص روی یک فایل GDX وجود دارد.فایل GDX فایلی است که مقادیر یک یا چند نماد GAMS مانند مجموعه ها ، متغیرهای پارامترها و معادلات را در خود ذخیره می کند. از فایل های GDX می توان برای تهیه داده برای یک مدل GAMS ، نتایج یک مدل GAMS ، ذخیره نتایج همان مدل با استفاده از پارامترهای مختلف و غیره استفاده کرد. از جمله موارد دیگر ، می توان از فایل GDX برای تهیه داده برای یک مدل GAMS ، انتقال نتایج یک مدل GAMS به برنامه های مختلف و انتقال نتایج به GAMS از برنامه های مختلف استفاده کرد.GDXXRWGDXXRW ابزاری برای خواندن و نوشتن داده های صفحه گسترده است. GDXXRW می تواند چندین محدودیت را در صفحه گسترده بخواند و داده ها را در یک فایل GDX بنویسد ، یا از یک فایل GDX بخواند ، و داده ها را در محدوده های مختلف در صفحه گسترده بنویسد.نحوه استفاده از GDXXRWفرمت کلی به صورت زیر میباشد:گزینه ها (options) و مشخصات نمادها  (symbols) را می توان علاوه بر داخل برنامه که نوشته میشود از یک فایل متنی جدا نیز خواند بصورتی که قبل فایل (option file) یک @ قرار بگیرد که در ادامه به آن نیز خواهیم پرداخت.گزینه ها و مشخصات نمادها را می توان از یک خانه ای در خودصفحه گسترده نیز خواند.گزینه ها (options)برای انجام خواندن و نوشتن بر روی فایل توسط GDXXRW ، باید تعدادی از گزینه ها و مشخصات نمادها به داخل برنامه انتقال یابد و نوشته بشود. توانایی GDXXRW در پردازش چندین عمل در یک تماس ، انتقال و تفسیر میتواند گزینه را پیچیده تر بکند.چهار نوع گزینه وجود دارد که عبارتند از:1. گزینه Immediate: قبل از انجام اقدامات دیگر شناسایی و پردازش می شوند و فقط یک بار مشخص می شوند. مانند دستورات: input, output, traceمستقل از موقعیت آنها در خط دستور شناخته می شوند. آنها بصورت عمومی و global هستند و فقط یکبار می توان آنها را مشخص کرد.برای تعریف دقیق تر بیشتر چند گزینه از جدول بالا، گزینه input فایل ورودی را مشخص میکند و حتما باید مقدار داشته باشد. از کلیدواژه های input یا i برای تعیین نام فایل ورودی در هر کجای خط دستور (command line) استفاده میشود. پسوند فایل ورودی، مورد نیاز است چرا که آن اقدامات انجام شده توسط برنامه را تعیین می کند. پسوند .gdx برای فایل ورودی ، داده های یک فایل GDX را خوانده و داده ها را در صفحه گسترده می نویسد. پسوند .xls یا .xlsx برای فایل ورودی یک صفحه گسترده را خوانده و داده ها را در یک فایل .gdx می نویسد. علاوه بر پسوند فایل ورودی .xls و .xlsx ، پسوندهای زیر نیز برای فایل های ورودی صفحه گسترده معتبر هستند: .wk1 ، .wk2 ، .wk3 و .dbf.گزینه output هم مشخص کننده فایل خروجی است که مقدار اولیه آن نام فایل ورودی است.گزینه index خواندن گزینه ها و نمادها را مستقیماً از صفحه گسترده نشان می دهد و با استفاده از این دستور GDXXRW کوتاه می شود و می توان اطلاعات مربوط به نحوه خواندن داده ها را مستقیماً در صفحه گسترده نوشت تا خوانایی آن افزایش یابد. ردیف اول محدوده برای عنوان ستون که پارامترهای اضافی را نشان می دهد استفاده می شود.2. گزینه Global: این دستور از چپ به راست برای GAMS تفسیر و ترجمه می شوند و بر هر عمل و دستوری که انجام میشود تأثیر می گذارند و از یک گزینه می توان چندین بار استفاده کرد تا اقدامات بعدی را تحت تأثیر قرار دهد. مانند دستورات: skipEmpty, epsOutگزینه های بالا بر روی نمادهای دنباله روی گزینه تأثیر می گذارند. آنها در عمل باقی می مانند مگر اینکه دوباره تعریف شده و دوباره برای نماد دیگری استفاده شوند.3. گزینه Symbol: این گزینه عمل جدیدی را برای خواندن یا نوشتن نماد معرفی می کند. مانند دستورات: par, set, dSetبرای نوشتن داده ها در صفحه گسترده یا فایل GDX ، یک یا چند نماد و دامنه اکسل مربوط به آنها باید مشخص شود.نحو کلی مشخصات نماد بصورت dataType = symbolName {symbolAttributes} میباشد.عکس زیر دستورات کامل این گزینه میباشد.(var = GAMS_Variable) یک زیرشاخه (sub-field) از یک متغیر یا معادله را می توان در یک صفحه گسترده نوشت و باید به عنوان بخشی از نام نماد  مشخص شود. زمینه های شناخته شده عبارتند از:.l (سطح(level)) ، .m (حاشیه ای(marginal)) ، .lo (حد پایین(lower bound)) ،.up (حد بالا(upper bound)) ، .prior (اولویت(priority)) و .scale(مقیاس(scale))نام های زیرشاخه ها به حروف کوچک و بزرگ حساس نیستند.(par = GAMS_Parameter)  پارامترهای مورد استفاده در GAMSرا مشخص میکند تا از یک فایل GDXخوانده شود و در صفحه گسترده نوشته شود ، یا از صفحه گسترده خوانده شود و در یک فایل GDXنوشته شود یعنی نام پارامتر از قبل تعریف شده را وارد میکنیم تا بعد ها به طریق آن و با آن نام استفاده بکنیم. به عنوان مثال Par = data1 پارامتر data1 را خوانده و داده ها را درجای دیگری میریزد.(set = GAMS_Set [values = valueType]) در GAMS می توان با تعیین تمام عناصر، مجموعه ای را تعریف کرد.4. گزینه Symbol attributes: ویژگی ها اطلاعات اضافی را برای آخرین نماد تعریف شده مشخص می کنند. مانند دستورات: dim, cDimdataRange : محدوده اکسل برای داده های نماد. توجه داشته باشید که یک دامنه خالی معادل سلول اول صفحه اول است.  rng = Excel Rangeمحدوده اکسل با استفاده از علامت گذاری استاندارد اکسل مشخص شده است: SheetName! CellRange.CellRange با استفاده از علامت گذاری سلول TopLeft: BottomRight مانند A1: C12 مشخص می شود. زمانی که BottomRight حذف شده است ، برنامه دامنه را تا آنجا که ممکن است پایین و به سمت راست گسترش می دهد. (استفاده از &quot;..&quot; به جای &quot;:&quot; پشتیبانی می شود.)هنگام نوشتن در صفحه گسترده اگر نام یک صفحه که در اکسل وجود ندارد آمده باشد، یک صفحه جدید با این نام اضافه می شود. جدول زیر خلاصه ای از دستورات میباشد.Dimensions:dim = integer بعد کلی برای نمادcDim = integer  بعد ستون، تعداد ردیف های محدوده داده ای است که برای تعریف برچسب (label) ستون ها استفاده می شود. اولین ردیف های cDim برای برچسب ها استفاده می شود.rDim = integer بعد ردیف، تعداد ستون های محدوده داده ای است که برای تعریف برچسب ردیف ها استفاده می شود. اولین ستون های rDim محدوده داده برای برچسب ها استفاده می شود.هنگام خواندن داده ها از یک فایل GDX و نوشتن در صفحه گسترده ، ابعاد نماد مشخص است ولی هنگام خواندن صفحه گسترده و نوشتن در یک فایل GDX ، بعد مشخص نیست.مثال:خواندن اکسل Test1 با استفاده از پارامتر data برای استفاده در برنامه و range ستون A1 تا ردیف D3 و ردیف اول و ستون اول هم برچسب های داده ها هستند.خواندن پارامتر با استفاده از پیش مقدار تعریفبجای rng با سینتکس گفته شده در بالا از این استفاده میکنیم و فقط نام محدوده ای که در اکسل نام گذاری شده را در rng مینویسم.Return Codes(کدهای برگشت شده)هنگام اجرای برنامه با موفقیتGDXXRW ، عدد صفر را به عنوان کد خطا برمی گرداند. اگر خطایی وجود داشته باشد که علاوه بر پیام خطا ، با کد بازگشت خاص علامت گذاری شود.Option file &#40;فایل گزینه&#41;یک فایل گزینه می تواند چندین خط برای افزایش خوانایی داشته باشد و هنگام خواندن پارامترها از یک فایل متنی ، خطوطی که با ستاره (*) شروع می شوند نادیده گرفته می شوند و به عنوان یک نظر عمل می کنند.اگر فایل howToRead(fileName).txt باشد آنگاه در این حالت تنظیمات کلی اعمالی بر روی فایل برای خواندن یا حتی نوشتن را روی این فایل نوشته و هنگام نوشتن کد با استفاده @ قبل نام فایل و پسوندش،  همه تنظیمات اعمال میشود و با استفاده از این حالت میتوان دستور قابتی را بدون نوشتن دوباره در چندین برنامه استفاده نمود.دستورات خواندن داده ها از صفحه گسترده و بارگیری در GAMSدستور $gdxin:این دستور برای بارگذاری موارد مشخص شده از یک فایل GDX یا برای بستن پرونده مشخص شده استفاده می شود. به شکل زیر نوشته میشود. (برای شناسایی و معرفی فایل منبع)دستور $load:این دستور موارد مشخص شده را از یک فایل GDX بارگیری می کند. گزاره حاوی $loadقبل و بعد از آن دستورات $gdxin قرار می گیرند. (وارد کردن داده به برنامه)$gdxin قبلی نام فایل GDX را مشخص می کند و پرونده را باز می کند.$gdxin موفق شده پرونده GDX را می بندد.نوشتن متن در فایل در حین compilationبا استفاده از دستوراتecho$ ، $onecho و offecho$ در هنگام اجرا  متن را به فایل های نام برده ارسال می کنند.echo$ یک خط متنی می فرستد:نکته: استفاده از &quot;&gt; &quot;یک فایل جدید ایجاد می کند ، در حالی که&quot; &gt;&gt; &quot;به یک فایل موجود اضافه متن را اضافه میکند.برای پیام های چند خطی می توان از دستورات onecho$ و offecho$ استفاده کرد.دستور $call :می توان از $call برای اجرای دستور GDXXRW در کد GAMS برای خواندن از صفحه گسترده در زمان تدوین(compilation) استفاده کرد.همه دستور ها در زمان اجرا و execute کردن فایل انجام خواهند شد.برای جایگزینی دستورات بالا می توان از execute و execute_load استفاده نمود برای مثال دو قطعه کد پایین معادل هم میباشند.نوشتن داده در صفحه گستردههنگام نوشتن در صفحه گسترده با GDXXRW ، باید از دستورات موجود در GAMS استفاده کنید تا ابتدا داده ها را در پرونده GDX قرار دهید . برای نوشتن داده ها باید از دستورات execute و execute_unload در زمان اجرا استفاده شود.برای مثال:خط execute_unload می گوید چه داده هایی را باید در فایل GDX قرار داد و نام فایل منبع GDX را تعیین می کند و قبل نوشتن در فایل، پارامتر ها را از GAMS بارگیری میکند. در خط بعدی  GDXXRW نام فایل GDX ، صفحه گسترده (اختیاری)، را بیان می کند و داده های مورد نظر برای نوشتن را مشخص می کند.نکته: هنگام استفاده از GDXXRW باید مراقب باشید زیرا هر بار که دستور اجرا می شود فایل همنام GDX پاک می شود و فقط دارای محتوای فعلی بعد اجرا آن خط است، بنابراین در صورت استفاده مجدد از نام ، باید قبل از آن پشتبانی تهیه بشود.مثالی دیگر برای نوشتن در فایل با استفاده از .txt فایلhText نوشته عنوان در که از خانه A1 شروع میشود میباشد و به اندازه &quot;,&quot; ستون رد میشود وبه ستون بعد میرود و در مثال بالا بعد نوشتن valuesL noData دو ستون رد شده و مقدار بعدی نوشته می شود. با توجه به خطوط بعدی و دستور values به معنی نوع داده در خانه ها، ستون اول خالی، ستون بعد مقدار y و ستون بعد با رشته(String) توسط GDXXRWپر خواهد شد و خروجی به شکل زیر میشود.برای اطلاع دقیق تر از موارد گفته شده و مضاف بر آنها منابع مطالعه گردد.منابعhttps://www.gams.com/latest/docs/T_GDXXRW.html#GDXXRW_SYMBOLS_SEThttps://www.gams.com/latest/docs/UG_GDX.html#UG_GDX_READ_COMPILE_GDXINhttps://www.gams.com/latest/docs/UG_DataExchange_ASCII.htmlhttps://www.gams.com/latest/docs/UG_GDX.html&quot;این مطلب در راستای درس بهینه سازی خطی2 در دانشگاه تحصیلات تکمیلی علوم پایه نوشته شده است.&quot;</description>
                <category>Reza Asadi</category>
                <author>Reza Asadi</author>
                <pubDate>Sat, 08 May 2021 16:48:38 +0430</pubDate>
            </item>
                    <item>
                <title>توابع هش و اصالت داده ها (Hash Functions and Data Integrity)</title>
                <link>https://virgool.io/@rezaasadi75/%D8%AA%D9%88%D8%A7%D8%A8%D8%B9-%D9%87%D8%B4-%D9%88-%D8%A7%D8%B5%D8%A7%D9%84%D8%AA-%D8%AF%D8%A7%D8%AF%D9%87-%D9%87%D8%A7-hash-functions-and-data-integrity-ny6la99djiot</link>
                <description>مقدمهامروزه با توجه به گسترش خدمات الکترونیکی، اینترنت و شبکه های اجتماعی و نقش اساسی این ها در مراودات و مبادلات اجتماعی و با توجه به قرارگیری انواع اطلاعات شخصی و عمومی در این بستر، امنیت اطلاعات یکی از مسائل ضروری و مهم در این چرخه گردیده‌است. در این بستر،  داده‌های سازمان‌ها در معرض دسترسی افراد و میزبان‌های خارجی قرار می‌گیرد. اطمینان از عدم دستیابی افراد غیرمجاز به اطلاعات حساس از مهم‌ترین چالش‌های امنیتی در رابطه با توزیع اطلاعات میباشد. در دنیای دیجیتال کنونی حفاظت از اطلاعات رکن اساسی و مهمی در تبادلات پیام‌ها و مبادلات تجاری ایفا می‌نماید.رمزنگاری (Cryptography) در عصر حاضر فرآیند تأمین امنیت اپلیکیشن‌ها و محافظت از دیتای مربوط به آن‌ها در برابر انواع حملات (در بستر اینترنت و یا غیر اینترنت) است و این مفهوم در تمامی حوزه‌های فضای مجازی به کار گرفته می‌شود. برای تأمین نیازهای امنیتی تراکنش های امن، از رمزنگاری استفاده می‌شود. با توجه به اهمیت این موضوع و گذار از مرحله سنتی به مرحله دیجیتال آشنایی با رمزنگاری بسیار مهم میباشد.توابع هش تاثیر اساسی و نقش مهمی در رمز نگاری دارد و از توابع هش برای کاهش میزان حافظه مورد نیاز برای ذخیره یا انتقال داده و برای شناسایی و identifier کردن استفاده میشود.با توجه به اهمیت موضوعات بیان شده  و کاربرد بسیار زیاد آنها در عصر حاضر، در این نوشته به رمزنگاری و توابع هش و اصالت داده خواهیم پرداخت.تاریخچهمیتوان گفت رمزنگاری همراه با  نوشتن و ایجاد قبایل و گروه ها و شکل گیری قدرت سیاسی در جامعه ایجاد شده است.این موضوع موجب ایجاد نگرش‌هایی مانند افزایش قدرت، پیروزی در نبردها و دستیابی به برتری شد و این موارد موجب افزایش گرایش انسان­ها به نیاز طبیعیِ ارتباط امن با گیرنده انتخابی توسط فرستنده شد. پیدایش این نوع شیوه‌های ارتباط در نوع خود موجب تکامل مداوم رمزنگاری شد.جایگزینی نماد، که به نوعی ساده‌ترین شکل رمزنگاری به حساب می‌آید، در نوشته‌های به جا مانده از مصریان و ساکنین بین‌النهرین، دیده می‌شود. در اینگونه از رمزنگاری به جای هر کدام از حروف یک نماد قرار می گرفته است.در یکی از شهرهای یونان باستان به نام اسپارتا، پیام‌ها از طریق نوشته شدن روی یک نوار کاغذی و پیچیدن آن دور یک استوانه‌ی با قطر مشخص رمزگذاری ‌می‌شدند. نوار کاغذی تا زمانی که توسط گیرنده آن، روی یک استوانه با همان قطر قرار نمی‌گرفت، به صورت ناخوانا باقی می‌ماند.به مرور زمان رمزنگاری بسیار کامل تر و دقیق تر شد. در جنگ جهانی دوم نمونه‌ای کامل از رمزنگاری با نام ماشین انیگما (Enigma) صورت میگرفته است. این دستگاه با بکارگیری نیروهای محور چرخ، از چرخ‌های در حال چرخیدن برای کدگذاری یک پیام استفاده می‌کند، که این نوع رمزنگاری تقریبا خواندن آن پیام توسط هر ماشین دیگری را غیرممکن می‌سازد. و در نهایت، تکنولوژی کامپیوترهای اولیه برای کمک به شکستن رمز ماشین انیگما مورد استفاده قرار گرفت و رمزگشایی پیام‌های انیگما، همچنان به عنوان یکی از مؤلفه‌های مهم در پیروزی نسل جدید رمزنگاری به حساب می‌آید.با پیدایش و افزایش استفاده از کامپیوترها، رمزنگاری به چیزی بسیار پیشرفته تر از آنچه در دوران قبل بود، تبدیل شد. این رمزنگاری ها با استفاده از سخت افزار ها، نرم افزارها و کد های نوشته شده(برنامه نویسی) بر روی کامپیوتر ها بسیار پیشرفته تر شد.توابع هش نوع خاصی از عملکرد برنامه نویسی است که برای mapping داده ها از اندازه دلخواه به داده هایی با اندازه ثابت استفاده می شود. توابع هش ناشی از نیاز به فشرده سازی داده ها به منظور کاهش میزان حافظه مورد نیاز برای ذخیره فایل های بزرگ است.بعد ها از توابع هش برای شناسایی (singularly-unique identifiers) به کار برده شد  به صورتی که به طور مثال از تابع هش در ذخیره پسوردها و داکیومنت‌های مربوط به این پسوردها و دیتای کاربران از طریق فرآیند هَشینگ محافظت می‌شوند و یا در سیستم‌های بلاکچین به منظور تولید آدرس‌های بلاکچین، شناسۀ تراکنش و بسیاری از الگوریتم‌ها و پروتکل‌های دیگر استفاده می‌شود.از توابع هش برای یکپارچگی داده ها در مورد طرح های امضای دیجیتالی نیز استفاده می شود، به این صورت که  که با توجه به موارد گفته شده این اعمال برای امنیت و محافظت از دیتا در برابر حملات استفاده میشود.کاربرد توابع هش و اصالت داده هادر توابع هش یک ورودی با طول های مختلف داده میشود و طی عملیاتی و الگوریتمی یک خروجی با طول ثابت داده میشود که شبیه به ورودی اولیه نمیباشد و با تغییر بسیار کوچک در ورودی، خروجی تغییر بسیاری خواهد کرد.از شروط تابع هش باید به این توجه نمود که تابع باید به صورت یکطرفه باشد و قابلیت decrypt شدن را نداشته باشد به صورتی که اگر یک تابع هش h یک مقدار هش z را تولید کرد، پیدا کردن یک مقدار x که هش آن با z یکی شود، بایستی فرآیند دشواری باشد.علاوه بر مطالب ذکر شده مهمترین و پر استفاده ترین استفاده از توابع هش برای حفظ Data Integrity  (اصالت و تمامیت داده ها) میباشد.یکپارچگی و اصالت داده ها یک صفت خاص یا یک ویژگی از اطلاعات است که باید اطمینان حاصل کنیم که داده ها در طی هر عمل (مانند انتقال ، ذخیره سازی یا بازیابی) &quot;نامتناقض&quot;، &quot;صحیح&quot;، &quot;کامل&quot; هستند و برای استفاده بیشتر به صورت صحیح ذخیره شده اند.به این صورت که hash value پیام به طریق تابع هش محاسبه میشود و در طرف دیگر برای اینکه فهم اینکه پیام تغییر کرده یا نه، hashcode پیام به وسیله گیرنده پیام (کسی که پیام بعد از گذشت از راه به او رسیده است) محاسبه و درآورده میشود و اگر هر دو هش یکسان بود پیام تغییر نکرده است و تمامیت داده ها حفظ شده است. این نکته نیز مهم میباشد که عمل هشینگ فقط بر روی integrity پیام اعمال میشود نه بر روی خود پیام.در عکس زیر(تصویر یک) نحوه استفاده از تابع به طور مثال H نمایش داده شده است.تصویر یک - استفاده از مثال تصویری برای درک کار تابع Hتوابع هش به 2 دسته تقسیم میشوند: توابع هش کلید دار و توابع هش بدون کلید که در دسته اول مشخصات یک پیام را دیکته میکند و مینویسد و در دسته دوم 2 ورودی مستقیم و پیام و یک کلید مخفی (secret key).تابع هش سه ویژگی فشرده سازی که یک پیام به آن داده میشود و خروجی یک پیام دیگر با طول ثابت میباشد و دیگر ویژگی آن سهولت در محاسبه و تبدیل به hash value میباشد و سومی به این صورت است که هیچوقت نباید خروجی 2 ورودی متفاوت یکی بشود و حتما باید تفاوت داشته باشد.دو نوع تابع هش بسیار پرکاربرد تر و بهتر میباشد که عبارتند از:1-  modiﬁcation detection codes (MDCs) : هدف از یک MDC ارائه هش یک پیام است و هدف نهایی تسهیل ، در ارتباط با سازوکارهای اضافی، اطمینان از یکپارچگی داده ها به عنوان برنامه های خاص مورد نیاز است.  MDC ها زیر مجموعه ای از توابع هش بدون کلید هستند و خودشان ممکن است طبقه بندی شوند.2. message authentication codes (MACs) : هدف از MAC  بدون استفاده از مکانیسم های اضافی ، اطمینان در مورد منبع پیام و یکپارچگی آن است . MAC ها دارای دو پارامتر کاملاً مجزا ، یک ورودی پیام و یک کلید مخفی هستند. آنها زیر مجموعه ای از توابع هش کلید دار هستند.تصویر زیر (تصویر دو) طبقه بندی ساده را نشان می دهد. برنامه های کاربردی اضافی از توابع هش کلید دار شامل استفاده از علامت گذاری به عنوان response که تابعی از یک کلید مخفی و یک پیام است ، می باشد. و برای تایید کلید. باید بین یک الگوریتم MAC و استفاده از MDC با یک کلید مخفی به عنوان بخشی از ورودی پیام آن تمایز قائل شد.تصویر دو - طبقه بندی ساده از 2 نوع تابع هش بسیار پرکاربردUnkeyed Hash Functions (MDCs)امروزه یک تحولی عمومی در ویژگی­ها و ساختاری که برای یکسری توابع هش شده در حال ایجاد است. در این بخش مجموعه ای از توابع درهم ساز بدون کلید به عنوان کد تشخیص اصلاح شناخته (MDCs) می شود در نظر گرفته شده است. از دیدگاه ساختاری, این موارد ممکن است براساس ماهیت عملیات شامل توابع فشرده سازی داخلی طبقه بندی شوند. از این دیدگاه, سه مقوله بزرگ توابع درهم ساز مطالعه شده تا به امروز توابع درهم سازی مبتنی بر رمزهای بلوکی, توابع درهم ساز سفارشی و توابع درهم ساز مبتنی بر محاسبات مدولار است. توابع هش کامل آنهایی هستند که به طور خاص برای درهم سازی, با سرعت در ذهن و مستقل از        سیستم­های دیگر طراحی شده­اند (به عنوان مثال, رمز بلوکی یا ضرب مدولار که ممکن است در حال حاضر برای اهداف غیر از هش وجود داشته باشد). جدول 3-3 امنیت مورد حدس یک زیرمجموعه از MDC ها که متعاقبا در این بخش مورد بحث قرار گرفت را نشان میدهد. شبیه به مورد رمزهای بلوکی برای رمزنگاری (به عنوان مثال 8 یا 12 دور DES در مقابل 16  دور DES) سرعت را قربانی سرعت می کنیم. در موارد خاص مبتنی بر بلوک MDC ها به طور تقریبی طرحی امن از  Merkley  با نرخ 0.276 شناخته شده است اما کاربرد کمی دارد, در حال که MDC-2 به طور گسترده مطمئن است و نرخ 0.5  دارد و توجه بیشتری را به عمل جلب می کند.توابع هش براساس بلوک رمزنگارییک انگیزه عملی برای ایجاد توابع درهم سازی از رمزهای بلوکی این است که اگر یک پیاده سازی کارآمد از یک رمز بلوکی در یک سیستم وجود داشته باشد)چه در سخت افزار و چه در نرم افزار) سپس با استفاده از آن به عنوان جز مرکزی برای یک عملکرد هش می تواند عملکرد دومی را با هزینه اضافی کوچک فراهم کند. امید این است که یک رمز بلوک خوب می تواند به عنوان یک بلوک ساختمانی برای ایجاد یک تابع درهم سازی با خواص مناسب برای کاربردهای مختلف عمل کند.a همین قدرت برای توابع hash دیویس - مایر و Miyaguchi - Preneel پیش‌بینی شده‌است. b قدرت را می توان با استفاده از یک رمز با keylength برابر با رمز نگاری افزایش داد. جدول 9.3- مرزه‌ای بالایی بر مقاومت توابع درهم ساز منتخب. بلوک‌های پیغام n - بیتی برای تولید مقادیر هش کامل m پردازش می‌شوند. تعداد رمز و عملیات تابع فشرده‌سازی که در حال حاضر برای یافتن preimages و برخوردها ضروری است، با فرض اینکه هیچ ضعف اساسی برای رمزهای بلوکی وجود ندارد (ارقام برای MDC - ۲ و MDC - ۴ دارای ویژگی‌های کلید ضعیف هستند). با توجه به نرخ، تعریف ۹.۴۰ را ببینید.این کار با هزینه اضافی کمی انجام می‌شود.  امید این است که یک رمز بلوکی خوب می‌تواند به عنوان یک بلوک ساختمانی برای ایجاد یک تابع درهم سازی با خواص مناسب برای کاربردهای مختلف عمل کند. ساختار برای توابع درهم ساز مشخص شده‌است که &quot;بسیار امن&quot;  ویژگی‌های ایده‌آل خاص رمز بلوکی را فرض می‌کند.  با این حال، رمزهای بلوکی دارای ویژگی‌های توابع تصادفی نیستند (برای مثال، آن‌ها اجتناب‌ناپذیر هستند نکته ۹.۱۴ را ببینید )علاوه بر این، در عمل رمزهای بلوکی معمولا قواعد یا نقاط ضعف اضافی را نمایش می‌دهند،  برای مثال یک بلوک رمز E  را در نظر بگیرید. رمزنگاری دوتایی با استفاده از رمزگشایی و رمزنگاری با استفاده از کلید های K1و K2 زمانی که K1=K2 هست اثرش را بر نتایج نشان میدهد. به طور خلاصه، در حالی که شرایط لازم مشخص است، مشخص نیست که نیازمندی‌های یک رمز بلوکی برای ساختن یک عملکرد هش کامل کافی است و خواص کافی برای یک رمز بلوک (به عنوان مثال مقاومت در برابر حمله متن انتخاب‌شد) ممکن است یک عملکرد هش خوب را تضمین کند.یک تابع بلوک رمز (n,r)  یک یک تابع برگشت پذیر از n بیت متن ساده به n  بیت متن متن رمز شدهبا استفاده از r  بیت کلید انجام می شود. اگر E یک رمزنگاری باشد پس Ek (x) رمزنگاری x با استفاده از کلید k را نشان میدهد.بحث توابع درهم سازی که از رمزهای بلوکی n ساخته شده اند بین آنهایی که دارای طول n بیت  و طول 2n بیت هستند تقسیم می شود, که در آن واحد و دوتایی نسبت به اندازه خروجی بلوک صفر هستند. تحت این فرض که محاسبات 264 عملیات غیر عملی است 3 هدف توابع درهم سازی واحد ارائه یک OWHF برای رمزهای طول بلوک نزدیک n=64 است یا برای فراهم آوردن CRHFs برای طول بلوک صفر نزدیک n=128 است. هدف برای توابع درهم سازی دو طول این است که رمزهای بلوکی N بیتی از اندازه تقریبا n=64 وجود دارند و کدهای درهم سازی تک هش این اندازه مقاوم به برخورد نیستند. برای چنین رمزهایی هدف به دست آوردن کد های درهم سازی به طول 2n بیت است که CRHFs هستند. در ساده ترین حالت اندازه کلید مورد استفاده در چنین توابع درهم سازی تقریبا مشابه طول بلوک رمز است (یعنی n بیت). در موارد دیگر, توابع درهم سازی از کلیدهای بزرگتر (به عنوان مثال دو برابر) استفاده می کنند. مشخصه دیگر که در این توابع درهم ساز مورد توجه قرار می گیرند, تعداد عملیات رمز بلوکی می باشد که برای تولید خروجی درهم سازی طول بلوک برابر با رمز کلید مورد نیاز است.که تعریف زیر را تعمیم می دهد.فرض کنید که یک تابع هش تکراری ساخته شده از یک صفر بلوک, با تابع فشرده سازی f که بلوک دیاگرام سازی را برای پردازش هر بلوک پیام n  بیتی متوالی انجام می دهد. سپس نرخ h  برابر با 1/s  است.توابع درهم ساز مورد بحث در این بخش به ترتیب در جدول  9.4 خلاصه شده است.  The Matyas-Meyer-Oseas و MDC-2 به ترتیب از دو تابع درهم ساز عمومی در استاندارد iso 10118-2 هستند , که هر کدام اجازه استفاده از هر بلوک n بیت را با طول m ≤ n و m ≤ 2n fi به ترتیب را فراهم می کنند.جدول 9.4 - خلاصه توابع درهم ساز انتخاب‌شده براساس رمزهای بلوکی n بیت. k = اندازه بیت کلید (تقریبی)؛ تابع مقدار هش کمی را بدست می‌دهد.i)  Single-length MDCs of rate 1سه طرح اولیه توصیف‌شده در زیر، و نشان‌داده‌شده در شکل ۹.۳، عملکردهای هش جداگانه با طول واحد مبتنی بر رمزهای بلوکی هستند. این‌ها از اجزای از پیش تعریف‌شده زیر استفاده می‌کنند:1. یک بلوک N بیتی عمومی به وسیله یک کلید متقارن K.2.  تابع g که ورودی n - بیتی را به کلیدهایی که برای E مناسب هستند (اگر کلیدهای E هم دارای طول n باشند، g ممکن است تابع هویت باشند)؛3. یک مقدار اولیه (معمولا n بیتی) اولیه, مناسب برای استفاده با E.شکل 9.3 - سه - طول، نرخ - یک MDCs  براساس رمزهای بلوکیالگوریتم Matyas-Meyer-Oseas hashورودی: رشته بیت xخروجی: n بیت کد هش شده از x1. ورودی x به بلوک¬ های n  بیت تقسیم می شود و اگر لازم باشد تا بلوک آخر کامل شود. این پیغام شامل موارد زیر است: x1x2 ...x t. یک مقدار ثابت n بیتی IV باید از قبل مشخص شود.2. خروجی Ht  به صورت زیر تعریف می شود:H0 = IV ; Hi = Eg(Hi−1)(xi)⊕xi, 1 ≤ i ≤ t.الگوریتم Davies-Meyer hashورودی: رشته بیت xخروجی: کد هش شده n بیتی x1- ورودی x به بلوک‌های k - بیت تقسیم می‌شود که در آن k اندازه اصلی است، و اگر لازم باشد، تا آخرین بلوک را کامل کنید.  پیام padded متشکل از بلوک‌های k بیتیx1x2 .. x: است. یک مقدار بیتی IV باید از قبل مشخص باشد.2- خروجی Ht  خواهد بود:H0 = IV ; Hi = Exi(Hi−1)⊕Hi−1, 1 ≤ i ≤ tالگوریتم Miyaguchi-Preneel hashاین روش نیز مشابه الگوریتم 9.41 می باشد با این تفاوت که خروجی Hi-1 از مرحله قبلی با این مرحله XOR خواهد شد. به طور جزئی Hi دوباره به این گونه تعریف می گردد:H0 = IV ; Hi = Eg(Hi−1)(xi)⊕xi⊕Hi−1, 1 ≤ i ≤ tنکته(روش دوگانه) هش Davies-Meyer ممکن است به عنوان دوگانه هش&quot;Matyas-Meyer-Oseas&quot; شناخته شود, به این معنا که Xi و Hi نقش معکوس را ایفا می کنند. هنگامی که DES به عنوان رمز بلوکی در Davies-Meyer استفاده می شود, ورودی در بلوک های 56  بیتی )نرخ بازده 56/64 &lt; 1) پردازش می شود در حالی که Matyas-Meyer-Oseas و Miyaguchi-Preneel بلوک های 64 بیتی را پردازش می کنند.(جعبه سیاه امنیتی) صرف نظر از ارگومان ابتکاری که در مثال 9.13 داده شده است, به نظر می رسد که تمام 3 الگوریتم 9.41 , 9.42 و 9.43 حاصل توابع هش ای هستند که در قالب مناسبی از “جعبه سیاه” امن هستند (به طور مثال فرض کنید E دارای ویژگی های تصادفی هست که حملات از هیچ یک هز ویژگی های E نمی تواند استفاده کند). &quot;امنیت&quot; به این معنی است که پیدا کردن پیش نمایش و برخورد ( در حقیقت شبه پیش نمایش و شبه برخورد – 9.7.2 را ببینید) به ترتیب 2n و 2n/2 بلاک های n بیتی  در عملیات رمزنگاری و برعکس نیاز است. با توجه به ماهیت تک طول آن ها, هیچ یک از این سه برخورد در برابر رمزهای موجود با طول بلوک نسبتا کوچک ( به عنوان مثال, DES که کد های هش شده 64 بیتی را خروجی میدهد) مقاوم هستند.چندین تابع درهم ساز چندتایی براساس رمزهای بلوکی بعدی در نظر گرفته می شوند.ii) Double-length MDCs: MDC-2 and MDC-4MDC-2 و MDC-4 کدهای تشخیص دستکاری هستند که به ترتیب 2 و 4 بلوک عملیات رمزنگاری به ازای هر بلوک از هش ورودی نیاز دارد. آنها ترکیبی از 2 یا 4 تکرار برنامه Matyas-Meyer-Oseas را بکار میگیرد تا یک هش جداگانه تولید کنند. هنگامی که از DES به عنوان رمز بلوکی اصلی استفاده می شود, کد هش 128  بیتی را تولید می کنند. با این حال, ساختار کلی می تواند با رمزهای بلوکی دیگری مورد استفاده قرار گیرد. MDC-2 و MDC-4 از اجزای از پیش تعیین شده استفاده می کنند.1.      DES به عنوان بلوک رمزنگاری Ek با طول بیت n=64 و با 56 بیت کلید K معین شده است;2.      دو تابع g و ˜ g مقدار 64  بیتی U  را به کلید DES که 56 بیتی است به مانند زیر نگاشت می کند. برای U = u1u2 ...u64 هر 8  بیتی که با U8  آغاز می شود را حذف کنید و دومین و سومین بیت  را برابر ‘10’ برای g قرار دهید و برای  ˜ g این مقدار را برابر ‘01’ قرار دهید:g(U)=u1 10u4u5u6u7u9u10 ...u63.˜ g(U)=u1 01u4u5u6u7u9u10 ...u63.(مقادیر نتایج ضمانتی برای ضیف بودن یا تقریبا ضعیف بودن کلید های DES ندارد ولی تمام این کلید ها bit 2 = bit3; صفحه 375 را ببینید.  همچنین ضمانت این را دارد که  . )MDC-2 در الگوریتم 9.46 و شکل 9.4 مشخص شده استشکل 9.4- تابع فشرده‌سازی MDC -2  هش. E=DESالگوریتم MDC-2 hash function (DES-based)ورودی: رشته x به طول r = 64t به طوری که t&gt;=2خروجی: 128 بیت کد هش شده x1. X را به بلاک های 64  بیتی میشکنیم  xi: x = x1x2 ...xt2. یک عدد ثابت 64  بیتی ,IV   ( همان مقدار ثابت باید برای تصدیق MDC استفاده شود) از مجموعه مقادیر از پیش تعیین شده انتخاب کنید. یکسری مقادیر از پیش تعیین شده (به صورت hexadecimal):IV^= 0x2525252525252525IV=0x52525252525252523. عملات || را به عنوان الحاق مشخص می کنیم,    و   32  بیت چپ و راست مقدار   هستند. خروجی برابر h(x) = Ht || t  به مانند روبرو تعریف می شود:در الگوریتم 9.46 , padding ممکن است برای برآورده کردن محدودیت طول بیت در ورودی x ضروری باشد. در این مورد, یک روش padding بدون ابهام ممکن است مورد استفاده قرار گیرد  ( توجه 9.31 را ملاحظه کنید), احتمالا شامل MD-strengthening. MDC-4 (الگوریتم 9.47 و شکل 9.5 را ببینید)  با استفاده از تابع فشرده سازی MDC-2 ساخته شده است. یک تکرار از تابع فشرده سازی MDC-4 شامل دو اجرای متوالی از تابع فشرده سازی MDC-2 است. که در آن:1. دو ورودی داده 64 بیتی برای اولین MDC-2 هر دو همان بلوک پیغام 64  بیتی بعدی هستند;2. کلید برای اولین MDC-2 فشرده سازی از خروجی های (متغیرهای chaining)   از compression قبلی MDC-4 مشتق شده اند;3.  کلید ها برای دومین MDC-2 فشرده سازی از خروجی (متغیرهای chaining)   اولین فشردگی MDC-2 استخراج شده­اند;4. دو ورودی داده 64 بیتی برای دومین MDC-2 فشرده سازی , خروجی (متغیرهای chaining)  متقابل فشرده سازی MDC-4 قبلی می باشد.الگوریتم MDC-4 hash function (DES-basedورودی: رشته x متشکل از بیت های به طول r=64t طوری که t&gt;=2 . )MDC-2 را در رابطه با padding ملاحظه کنید.)خروجی: 128 بیت کد هش شده از x.1. مانند مرحله اول MDC-2 بالا.2. مانند مرحله دوم MDC-2 بالا.3. با توجه به MDC-2 , خروجی h(x) = Gt || t مثل زیر تعریف می شود (1 ):سفارشی کردن تابع هش براساس MD4توابع هش کامل آن هایی هستند که به طور خاص &quot;از صفر&quot; برای هدف صریح درهم سازی, با عملکرد بهینه در ذهن طراحی شده­اند, و بدون توجه به استفاده مجدد از مولفه های سیستم موجود مانند رمزهای بلوکی یا حساب مدولار. کسانی که بیش ترین توجه را در عمل دریافت کرده اند مبتنی تابع درهم ساز MD4 هستند. شماره 4  در مجموعه ای از توابع درهم ساز(Message Digest algorithm), MD4 به طور خاص برای پیاده سازی نرم افزار روی ماشین های 32 بیتی طراحی شد. نگرانی های امنیتی طراحی MD5 را اندکی پس از آن, به عنوان یک تغییر محافظه کارانه تر از MD4 برانگیخته است.شکل 9.5- عملکرد فشرده سازی تابع هش MDC-4دیگر نسخه های بعدی مهم شامل الگوریتم( Secure Hash Algorithm SHA-1) , تابع درهم ساز RIPEMD و انواع تقویت شده آن RIPEMD-128 و RIPEMD-160 است. پارامترهای این تابع درهم ساز در جدول 9.5 &quot;Rounds x Steps per round&quot;  خلاصه شده اند که به عملیات انجام شده بر روی بلوک های ورودی در تابع فشرده سازی مربوطه اشاره دارد. جدول 9.6 بردارهای تست را برای زیر مجموعه این توابع درهم ساز مشخص می کند.نشانه گذاری برای توصیف الگوریتم های خانواده MD4جدول 9.7 نماد برای توصیف الگوریتم خانواده MD4 را توصیف و تشریح می کند. توجه داشته باشید که 9.48 به مساله اجرایی تبدیل رشته های بایت به کلمات به روش صریح و بدون ابهام اشاره می کند.نکته(کم و بیش) برای اجرای تبدیل بایت به کلمه بر روی پردازنده های متفاوت (به عنوان مثال تبدیل بین کلمات 32 بیتی و گروهی از بایت های 8 بیتی) باید یک قرداد بدون ابهامی مشخص شود. یک رشته از بایت های Bi را با آدرس های حافظه ای در حال افزایش در نظر بگیریدکه به کلمه 32بیتی و یک مقدار عددی W ترجمه می شود. دراین اندک معماری های بایت با کمترین دسترسی حافظه (B1)  حداقل بایت را دارد:W =224 B4 +216 B3 +28 B2 + B1در بیش تر پروژه ها بایت با کم ترین آدرس B1  مهم ترین byte محسوب می شوند:W =224 B1 +216 B2 +28 B3 + B4i)       MD4الگوریتم MD4 ) Algorithm 9.49)   یک تابع درهم ساز 128 بیتی است. اهداف طراحی اصلی MD4 این بود که شکستن آن باید به یک تلاش سخت نیاز داشته باشد, پیدا کردن پیام های متمایز با همان مقدار هش باید در حدود 264  عملیات را در نظر بگیرد و یک پیام را پیدا کند که با مقدار هش از پیش تعیین شده باید حدود 2128    عملیات را نیاز دارد. اکنون می دانیم که MD4 در رسیدن به این هدف ناموفق عمل می کند (نکته 9.50). با این وجود یک توصیف کامل از MD4 به عنوان الگوریتم 9.49 برای مرجع تحلیلی تاریخی و رمزنگاری گنجانده شده است. همچنین به عنوان مرجع مناسب برای توصیف , و اجازه داده به مقایسه ها بین دیگر توابع درهم ساز در این خانواده عمل می کند.جدول 9.5-  خلاصه ی از توابع هش بر اساس MD4جدول 9.6- تست بردار ها برای تابع هش انتخابیجدول 9.7- علائم برای  الگوریتم مشابه MD4الگوریتم MD4 hash functionورودی: رشته بیت x با طول دلخواه b   . ( برای علائم جدول 9.7 را ملاحظه کنید.)خروجی: 128  بیت کد هش شده از x. ( جدول 9.6 را ملاحظه کنید.)1. تعریف ثابت ها. تعریف  4 مقدار اولیه chaining که هر کدام 32 بیت هستن( IVs):H1 = 0x67452301, h2 = 0xefcdab89,  h3  = 0x98badcfe, h4 = 0x10325476تعریف مقادیر 32بیتی ثابت:y[j]=0, 0 ≤ j ≤ 15;y[j]=0x5a827999, 16 ≤ j ≤ 31; (constant = square-root of 2)y[j]=0x6ed9eba1, 32 ≤ j ≤ 47; (constant = square-root of 3)تعریف ترتیب دسترسی به منابع کلمات (هر لیست شامل 0 تا 15 می باشد):z[0..15] = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],z[16..31] = [0,4,8,12,1,5,9,13,2,6,10,14,3,7,11,15],z[32..47] = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15].نهایتا تعریف موقعیت های بیت  برای شیفت به چپ (چرخش):s[0..15] = [3,7,11,19,3,7,11,19,3,7,11,19,3,7,11,19],s[16..31] = [3,5,9,13,3,5,9,13,3,5,9,13,3,5,9,13],s[32..47] = [3,9,11,15,3,9,11,15,3,9,11,15,3,9,11,15].2. پیش پردازش. فاصله x به گونه ای است طول بیت آن برابر با مضربی از 512  است. یک  بیت 1 را بیافزایید سپس به تعداد0)    r-1 (بیت صفر نیز الحاق می کنیم که نتیجه آن طول بیت 64  که کمتر از مضرب های 512  می باشد. در آخر نمایش 64 بیتی b mod 264  را با دو عدد کلمه 32 بیتی با حداقل کلمه مشخص در اول به آن الحاق می کنیم. فرض کنید m یک تعدادی از بلاک های 512 بیتی باشد که به شکل رشته (b + r + 64 = 521m = 3216) نشان داده می شود. فرمت ورودی شامل 16m کلمه 32 بیتی می باشد: x0x1 ...x16m−1مقدار اولیه: (H1,H2,H3,H4) ← (h1,h2,h3,h4)3.  پردازش. برای هر i از صفر تا m-1 , ith تعداد بلاک از 16  کلمه 32  بیتی را در حافظه موقت کپی کنید:X[j] ← x16i+j, 0 ≤ j ≤ 15 پردازش مانند زیر دارای 16  مرحله قبل به روز کردن chaining variable ها است:(initialize working variables) (A,B,C,D) ← (H1,H2,H3,H4).(Round 1) For j from 0 to 15 do the following:t ← (A + f(B,C,D)+X[z[j]] + y[j]), (A,B,C,D) ← (D,t ←s [j],B,C).(Round 2) For j from 16 to 31 do the following:t ← (A + g(B,C,D)+X[z[j]] + y[j]), (A,B,C,D) ← (D,t ←s [j]),B,C).(Round 3) For j from 32 to 47 do the following:t ← (A + h(B,C,D)+X[z[j]] + y[j]), (A,B,C,D) ← (D,t ←s [j]),B,C).(update chaining values) (H1,H2,H3,H4) ← (H1+A,H2+B,H3+C,H4+D).4. تکامل. مقدار هش نهایی حاصل الحاق این موارد هست: H1||H2||H3||H4(اولین و آخرین بایت ها کمترین و بیشترین از H1 , H4 به ترتیب هستند)حملات براساس ویژگی های رمزگذاریویژگی های خاص رمزهای بلوکی که ممکن است هیچ نگرانی کاربردی نداشته باشد وقتی برای رمزنگاری مورد استفاده قرار می گیرد , باید با دقت بررسی شود که این رمزهای بلوکی برای ساخت توابع درهم ساز مورد استفاده قرار می گیرند. خطر عمومی این است که چنین خواص ممکن است دستکاری معکوس ورودی های تابع فشرده سازی را تسهیل کند تا به پیش بینی یا کنترل بیشتر خروجی ها یا روابط بین خروجی های تکراری متوالی اجازه دهد. در بین ویژگی های رمز بلوکی ناشی از نگرانی احتمالی آمده است:1. ویژگی تکامل :   Ek ( y = Ek(x)  که در آن x بیانگر مکمل bitwise است. این مساله یافتن جفت پیغام کلید برای ورودی های رمز بلوکی آن است که خروجی های آن با روشی از پیش تعیین شده متفاوت هستند. برای مثال, برای چنین بلاک های رمزنگاری E تابع فشرده سازی xi (xi) xi f(Hi-1,xi) = EH(i-1)  همان خروجی را برا ی xi  مکمل bitwise   تولید می کند.2.  کلیدهای ضعیف: Ek(Ek(x)) = x   . این ویژگی از رمز بلوکی ممکن است به رقیب اجازه دهد که به راحتی یک نقطه ثابت دو مرحله ای تابع فشرده سازی f را ایجاد کند که بلاک پیغام xi  اثر مستقیم روی کلید های رمزنگاری ورودی دارد.3. نقاط ثابت: Ek(x) = x.   نقاط ثابت بلوک صفر ممکن است حملات نقطه ای ثابت را تسهیل کنند اگر یک دشمن بتواند ورودی کلید رمز بلوکی را کنترل کند. برای مثال تابع فشرده سازی Devies-Meyer , f(Hi-1, xi) = Ex(Hi-1) Hi-1 اگر Hi-1 نقطه ثابت از بلوک رمزنگاری برای کلید xi باشد پس این باعث می شود تا خروجی تابع فشرده سازی قابل پیش بینی باشد f(Hi-1, xi) = 0 .4.  تصادم کلید Ek(x)=Ek (x). این ممکن موجب تصادم توابع فشرده سازی شود.اگر چه آنها ممکن است به عنوان معیارهای متمایز عمل کنند, حملاتی که کاملا به صورت معمولی مشاهده می شوند. باید به طور جداگانه از دیگران مورد توجه قرار گیرند. برای مثال به نظر می رسد که حملات نقطه ثابت نتیجه عملی محدودی دارند.منابعاگر به این موضوع علاقمند هستید می‌توانید از این کتاب کمک بگیرید. در صورتیکه می‌خواهید موارد مشابه را ببینید به این نوشته مراجعه کنید. این لینک نیز توضیحات جامعی در این مورد دارد.Alfred J. Menezes، Paul C. van Oorschot &amp; Scott A. Vanstone. Handbook of Applied Cryptography. Chapter 9W. Stallings. Cryptography and Network Security. Chapter 11https://en.wikipedia.org/wiki/History_of_cryptography&quot;این مطلب در راستای درس رمزنگاری و امنیت در دانشگاه تحصیلات تکمیلی علوم پایه نوشته شده است.&quot;&quot;تشکر میکنم از مهندس رضا رشیدنیا که این مطلب رو با یکدیگر تهیه نمودیم.&quot;</description>
                <category>Reza Asadi</category>
                <author>Reza Asadi</author>
                <pubDate>Wed, 12 Aug 2020 00:11:36 +0430</pubDate>
            </item>
            </channel>
</rss>