Методи криптоаналізу

www.hackerz.ru

<br /> 1.1. Термінологія і вихідні допущення.<br /> Криптологія досить чітко ділиться на дві частини: криптографію (шифрування)<br /> і криптоаналіз. Криптограф намагається знайти методи забезпечення секретності<br /> і (або) автентичності (справжності) повідомлень. Криптоаналітик намагається<br /> виконати зворотну задачу, розкриваючи шифр або підроблюючи кодовані<br /> сигнали таким чином, щоб вони були прийняті як справжні. Початкове<br /> повідомлення, якому криптограф застосовує своє мистецтво, називається<br /> відкритим текстом, а результат його роботи &#8211; шифрованим текстом повідомлення &#8211;<br /> шифртекст, або криптограми. Для управління процесом шифрування<br /> криптограф завжди використовує секретний ключ. Часто (але не завжди) він<br /> передає цей секретний ключ яких-небудь надійним способом (наприклад, в<br /> &quot;Дипломаті&quot;, пристебнутий наручниками до руки кур&#39;єра) людині (або<br /> машині), якій він збирається пізніше послати криптограму, складену<br /> з використанням цього ключа.<br /> Майже загальноприйняте допущення в криптографії полягає в тому, що<br /> криптоаналітик противника має повний текст криптограми. Крім того,<br /> криптограф майже завжди керується правилом, вперше сформульованим<br /> голландцем Керкхоффом: стійкість шифру повинна визначатися тільки<br /> секретністю ключа. Іншими словами, правило Керкхоффа полягає в тому, що<br /> весь механізм шифрування, крім значеннями секретного ключа, відомий<br /> криптоаналітик противника. Якщо криптограф приймає тільки ці два<br /> допущення, то він розробляє систему, стійку при аналізі на основі<br /> тільки шифрованого тексту. Якщо до того ж криптограф допускає, що<br /> криптоаналітик противника зможе дістати кілька уривків відкритого<br /> тексту та відповідного йому шифрованого тексту, утвореного з<br /> використанням секретного ключа, то розробляється система, стійка при<br /> аналізі на основі відкритого тексту. Криптограф може навіть допустити, що<br /> криптоаналітик противника здатний ввести свій відкритий текст і отримати<br /> правильну криптограму, утворену з використанням секретного ключа<br /> (Аналіз на основі обраного відкритого тексту), або припустити, що<br /> криптоаналітик супротивника може підставити фіктивні криптограми і<br /> отримати текст, в який вони перетворюються при расшифровании (аналіз на<br /> основі обраного шифртекста), або допустити обидві ці можливості (аналіз<br /> на основі обраного тексту). Розробники більшості сучасних шифрів<br /> забезпечують їх стійкість до аналізу на основі обраного відкритого тексту<br /> навіть у тому випадку, коли передбачається, що криптоаналітик супротивника<br /> зможе вдатися до аналізу на основі шифртекста.<br /> 1.2. Завдання криптографії. Поняття стійкості криптографічного алгоритму.<br /> Криптологія &#8211; &quot;особлива&quot; область досліджень. Про досягнення цієї науки всі<br /> частіше повідомляють не тільки наукові, але й науково-популярні журнали і звичайна<br /> преса. За кордоном в останні роки спостерігається небувалий бум в області<br /> криптології. Це пов&#39;язано з тим, що її досягнення стали пріменятьс НЕ<br /> тільки у вузьких колах відомчих, а й у житті мільйонів громадян.<br /> Широке впровадження обчислювальних систем призвело до того, що вони становітсяя<br /> привабливими для різного роду інформаційних нападів. Це<br /> облегчаетс тим, що інформація виявилася позбавленою свого фізичного<br /> втілення, як було раніше (наприклад, текст написаний на папері і підписаний<br /> автором). Відсутність такого фізичного втілення, поєднане з<br /> неможливістю аутентифікації його автора, відкрило шлях до різного роду<br /> порушень. У зв&#39;язку з цим з&#39;явилася необхідність не тільки у забезпеченні<br /> конфіденційності, а й у забезпеченні контролю справжності і цілісності<br /> інформації. Крім того, зростання цінності інформації та інформатизація суспільства<br /> ставлять питання розмежування доступу до інформації (наприклад, якщо<br /> користувач не сплатив роботу з базою знань) та питання захисту від<br /> комп&#39;ютерного тероризму. На сьогоднішній день така захист здійснюється<br /> ефективно з використанням засобів криптографії.<br /> Системи і засоби захисту інформації (СЗІ) отлічаютс від &quot;звичайних&quot; систем і<br /> коштів тим, що для них не існує простих і однозначних тестів,<br /> які дозволяють переконатися в тому, що інформація надійно захищена. Крім<br /> того, ефективність СЗІ і просто їх наявність ніяк не связиваютс на<br /> працездатності основної системи. Тому завдання ефективності СЗІ НЕ<br /> може бути вирішена звичайним тестуванням. Наприклад, для перевірки<br /> працездатності системи зв&#39;язку досить провести її випробування. Однак<br /> успішне завершення цих випробувань не дозволяє зробити висновок про те, що<br /> вбудована в неї підсистема захисту інформації теж працездатна.<br /> Завдання визначення ефективності СЗІ (особливо, якщо використовуються<br /> криптографічні методи захисту), найчастіше більш трудомістка, ніж<br /> розробка ЗЗІ, вимагає наявності спеціальних знань і, як правило, більш<br /> високої кваліфікації, ніж завдання розробки. Часто аналіз нового шифру<br /> є нової наукової, а не інженерним завданням.<br /> Ці обставини призводять до того, що на ринку з&#39;являється безліч<br /> засобів криптографічного захисту інформації, про які ніхто не може<br /> сказати нічого певного. При цьому розробники тримають криптоалгоритм<br /> (Як показує практика, часто нестійкий) в секреті. Проте завдання<br /> точного визначення даного криптоалгоритму не може бути гарантовано<br /> складної хоча б тому, що він відомий розробникам. Крім того, якщо<br /> порушник знайшов спосіб подолання захисту, то не в його інтересах про це<br /> заявляти. У результаті, користувачі таких ЗЗІ потрапляють в залежність як<br /> мінімум від розробника. Тому суспільству повинно бути вигідно відкрите<br /> обговорення безпеки ЗЗІ масового застосування, а приховування<br /> розробниками криптоалгоритму повинно бути неприпустимим.<br /> Кріптосхеми або криптоалгоритмом будемо називати власне алгоритм<br /> шифрування, імітозащіти, та інших криптографічних функцій.<br /> Криптографічним протоколом будемо називати набір правил і процедур,<br /> визначає використання криптоалгоритму. Криптосистема представляє<br /> собою сукупність кріптосхеми, протоколів і процедур управління ключами,<br /> включаючи виготовлення і розповсюдження. Ці визначення не претендують на<br /> строгість і не дозволяють провести чітку межу між криптоалгоритмом і<br /> протоколом. Так, хеш-функція y = F (z, x) + x, де F &#8211;<br /> криптоперетворень з відомим ключем z, може рассматріватьс і як<br /> самостійний криптоалгоритм, і як протокол, що використовує<br /> перетворення F. Однак для подальшого викладу цих визначень<br /> достатньо.<br /> Прийнято розрізняти криптоалгоритми за ступенем доказовості їх безпеки.<br /> Існують безумовно стійкі, доказово стійкі та імовірно<br /> стійкі криптоалгоритми. Безпека безумовно стійких криптоалгоритмів<br /> заснована на доведених теоремах про неможливість розкриття ключа. Прикладом<br /> безумовно стійкого криптоалгоритму є система з разовим<br /> використанням ключів (шифр Вернама) або система квантової криптографії,<br /> заснована на квантовомеханічної принципі невизначеності. Стійкість<br /> доказово стійких криптоалгоритмів визначається складністю решени добре<br /> відомої математичної задачі, яку намагалися вирішити багато математиків<br /> і яка є загальновизнано складною. Прикладом можуть служити системи<br /> Діффі-Хеллмана або Ривеста-Шаміра-Адельмана, засновані на складнощах<br /> відповідно дискретного логарифмування і розкладання цілого числа на<br /> множники. Імовірно стійкі криптоалгоритми засновані на складності<br /> рішення приватної математичної задачі, яка не зводиться до добре<br /> відомим завданням і яку намагалися вирішити одне або кілька осіб.<br /> Прикладами можуть криптоалгоритми ГОСТ 28147-89, DES, FEAL.<br /> На жаль безумовно стійкі криптосистеми незручні на практиці (системи<br /> з разовим використанням ключа вимагають великої захищеної пам&#39;яті для<br /> зберігання ключів, системи квантової криптографії вимагають<br /> волоконно-оптичних каналів зв&#39;язку і є дорогими, крім того,<br /> доказ їхньої безпеки йде з області математики в область<br /> фізики).<br /> Перевагою доказово стійких алгоритмів являетс хороша вивченість<br /> завдань, покладених в їх основу. Недоліком їх являетс неможливість<br /> оперативної доопрацювання криптоалгоритмів у разі появи такої<br /> необхідності, тобто жорсткість цих криптоалгоритмів. Підвищення<br /> стійкості може бути досягнуто збільшенням розміру математичної задачі<br /> або її заміною, що, як правило, тягне ланцюг змін не тільки в<br /> шифрованого, але і суміжній апаратурі.<br /> Імовірно стійкі криптоалгоритми характерізуютс порівняно малої<br /> вивченістю математичної задачі, але зате мають велику гнучкість,<br /> що дозволяє не відмовлятися від алгоритмів, в яких виявлені слабкі<br /> місця, а проводити їх доопрацювання.<br /> Завдання забезпечення захищеного зв&#39;язку включає в себе цілий комплекс<br /> проблем. Це завдання забезпечення секретності і імітозащіти, впізнання<br /> (Аутентифікації) і завдання управління ключами, включаючи їх вироблення,<br /> розподіл і доставку користувачам, а також їх оперативну заміну в<br /> разі потреби.<br /> Загальна схема організації захищеного зв&#39;язку наведена на малюнку 2.1. Цією ж<br /> схемою описується і абонентське шифрування, коли користувач шифрує<br /> інформацію, що зберігається в пам&#39;яті ЕОМ. В останньому випадку джерело повідомлень і<br /> одержувач ототожнюється, а канал зв&#39;язку може мати довільні<br /> затримки.<br /> Джерело повідомлень виробляє довільну інформацію (відкриті тексти)<br /> з якимось розподілом ймовірностей. Шифратор шифрує це повідомлення на<br /> конфіденційному (відомому тільки відправнику і одержувачу) ключі Z і<br /> переводить відкритий текст в шифрований текст або шифрограму<br /> (Криптограму, шифртекст). Ключі виробляються джерелом ключів і по<br /> безпечних каналах розсилаються абонентом мережі зв&#39;язку. Дешифратор розкриває<br /> прийняту шифрограму і передає одержувачу.<br /> У схему на малюнку 2.1. включені ще рандомізатор і вирішальне пристрій.<br /> Рандомізатор робить все шифрограми несхожими один на одного, навіть якщо<br /> вхідні повідомлення однакові. Мета цього буде роз&#39;яснена нижче. Вирішальне<br /> пристрій приймає рішення про те, чи є повідомлення, яке<br /> справжнім, тобто виконує функцію імітозащіти.<br /> Операції шифрування і розшифрування можна описати так: Y = E (X), X = D (Y).<br /> Для взаємної однозначності необхідно, щоб DE було одиничним<br /> перетворенням. У цьому розділі буде предполагатьс наявність у відправника<br /> і одержувача загального секретного ключа Z. (Насправді ключі у них не<br /> обов&#39;язково однакові, але знання одного ключа, наприклад шифрування,<br /> дозволяє легко обчислити інший. Тому розглядаються криптоалгоритми<br /> іноді називають симетричними, або одноключевой. Відповідно, і<br /> криптографія, що займається вивченням таких алгоритмів, називається<br /> одноключевой). Данна схема застосовується в тому випадку, якщо абоненти мережі<br /> довіряють один одному.<br /> Нижче показано, як за допомогою одноключевой криптографії вирішуються питання<br /> імітозащіти і розпізнавання (таємність обеспечіваетс очевидним чином).<br /> Справжність і цілісність повідомлення обеспечіваютс його криптографічним<br /> перетворенням, виконуваних за допомогою секретного ключа. Наприклад, якщо<br /> відправник передасть відразу і відкритий (не вимагає засекречування), і<br /> зашифрований тексти, то це дозволить одержувачу, знає ключ,<br /> стверджувати, що текст при передачі по каналу зв&#39;язку не був змінений, якщо<br /> результат розшифрування шифрограми збігається з відкритим текстом.<br /> Дійсно, випадковий збіг відповідних один одному відкритого<br /> тексту і шифрограми &#8211; практично неможлива подія. Цю пару міг<br /> скласти лише відправник, що знає секретний ключ. Звідси випливає і<br /> достовірність повідомлення (відправник ототожнюється з власником ключа). У<br /> Насправді немає необхідності передавати всю шифрограму, досить<br /> передати лише її частина, звану імітовставки, яка повинна залежати<br /> від усього відкритого тексту. Тоді одержувач може на підставі отриманого<br /> тексту і ключа обчислити свою імітовставки і перевірити її відповідність<br /> отриманої.<br /> Для впізнання користувача використовується наступний діалог. Перевіряючий<br /> виробляє випадковий текст і посилає впізнаваного для шифрування.<br /> Упізнаваний шифрує цей текст і повертає перевіряльникам. Той перевіряє<br /> відповідність шифрограми тексту. Правильна відповідь може скласти тільки<br /> власник секретного ключа, який ототожнюється із законним<br /> користувачем. Очевидно, що прослуховує діалог порушник не зможе<br /> правильно зашифрувати новий текст і назватися користувачем. (Виключенням<br /> є аналогія відомого шахрайства, застосованого при грі в шахи<br /> поштою, коли порушник просто транслює відповіді та запити справжнім<br /> перевіряючому і перевіряється, ведучи діалог одночасно з кожним з них).<br /> Принципова відмінність даної системи від впізнання за паролем, де<br /> підслуховування дозволяє дізнатися секретний пароль і надалі<br /> скористатися цим, полягає в тому, що тут по каналу зв&#39;язку<br /> секретна інформація не передається. Ясно, що і якість шифрування, і<br /> імітостойкость, і стійкість впізнання можуть бути забезпечені, якщо<br /> покладене в основу криптоперетворень є стійким в сенсі<br /> розкриття ключа.<br /> Криптографічні алгоритми зазвичай будуються з використанням простих і<br /> швидко виконуваних операторів декількох типів. Безліч оборотних<br /> операторів, що перетворюють текст довжиною n біт в текст довгою n біт,<br /> є елементами групи оборотних операторів по множенню (підстановок<br /> n-розрядних слів). Нехай f, g, h &#8211; оборотні оператори, тобто існують f<br /> -1, G -1, h -1. Тому hgf &#8211; послідовне виконання операторів<br /> f, g, h &#8211; теж оборотний оператор (оператори виконуються справа наліво) з<br /> зворотним оператором до цього твору f -1, g -1, h -1. Тому<br /> дешифратор виконує ті ж операції, що і шифратори, але у зворотному<br /> порядку, і кожен оператор розшифрування є зворотним до<br /> відповідному оператору шифрування. Деякі оператори є<br /> взаємно зворотними, тобто виконання підряд два рази деякої операції<br /> над текстом дає вихідний текст. У термінах теорії груп це записується<br /> рівнянням f 2 = e, де e &#8211; одиничний оператор. Такий оператор називається<br /> інволюцією. Можна сказати, що інволюція є корінь з<br /> одиниці. Прикладом інволюції є додавання по модулю два тексти з<br /> ключем.<br /> Порушник може вирішувати такі завдання. Він може намагатися розкрити<br /> зашифровану інформацію, організувати вибіркове пропускання тій чи іншій<br /> інформації, нарешті, він може намагатися змінити справжню чи нав&#39;язати<br /> неправдиву інформацію. Принципова відмінність завдань засекречування та<br /> імітозащіти полягає в тому, що ключ засекречування повинен бути не<br /> доступний порушникові протягом терміну секретності інформації, який зазвичай<br /> набагато більше, ніж термін дії ключа і може складати десятки років.<br /> Ключ імітозащіти представляє інтерес для порушника тільки під час його<br /> дії. Тому й вимоги до нього пред&#39;являються менш жорсткі, ніж до<br /> ключу засекречування.<br /> Існує ще одне важливе застосування одноключевой криптографії. Це<br /> здійснення обчислюваною в одну сторону перетвореннями інформації. Таке<br /> перетворення називається хеш-функцією. Особливість цього перетворення<br /> полягає в тому, що пряме перетворення y = h (x) обчислюється легко, а<br /> зворотне x = h-1 (y) &#8211; важко. Взагалі кажучи, зворотне перетворення не<br /> є функцією, тому правильніше говорити про знаходження одного з<br /> прообразів для даного значення хеш-функції. У цьому випадку ключа,<br /> розуміється як деяка конфіденційна інформація, немає. Однак стійкі<br /> хеш-функції, для яких прообраз по даному значенню функції важко<br /> знайти, реалізуються криптографічними методами і вимагають для обгрунтування<br /> стійкості проведення криптографічних досліджень. Типове застосування<br /> хеш-функції &#8211; створення стисненого образу для вихідного тексту такого, що<br /> знайти інший текст, що володіє таким же чином, обчислювально неможливо.<br /> Завдання створення стійкої хеш-функції виникає, наприклад, при цифровій<br /> підписи текстів.<br /> Одне з можливих застосувань самостійних хеш-функцій &#8211; це упізнання<br /> користувача за допомогою ланцюжка виду x, h (x), h (h (x)) = h 2 (x), h 3 (x),<br /> &#8230; h k(x).<br /> Останнє значення ланцюжка hk (x) є контрольною інформацією для<br /> перевіряючого, а користувач знає h k-1 (x) і пред&#39;являє цю інформацію<br /> на вимогу перевіряючого. Перевіряючий обчислює h (h k-1 (x)) і порівнює<br /> з контрольною. Наступного разу цей користувач повинен пред&#39;явити h<br /> k-2 (x), а контрольної інформацією є h k-1 (x) і т.д. Це цікаве<br /> рішення, запропоноване А. Конхеймом, однак має ряд недоліків.<br /> По-перше, користувачеві треба зберігати весь ланцюжок hi (x), що вимагає<br /> великого об&#39;єму пам&#39;яті, якщо число впізнання може бути велике.<br /> По-друге, якщо у кожного учасника є кілька перевіряючих, то<br /> постає питання про синхронізацію перевіряючих за показниками останнього<br /> використаного значення hi (x), тобто потрібно канали зв&#39;язку між<br /> кожною парою перевіряючих.<br /> Здатність криптосистеми протистояти атакам (активного чи пасивного)<br /> криптоаналітик називається стійкістю. Кількісно стійкість вимірюється<br /> як складність найкращого алгоритму, що приводить криптоаналітик до успіху з<br /> прийнятною вірогідністю. У залежності від цілей і можливостей<br /> криптоаналітик змінюється і стійкість. Розрізняють стійкість ключа (складність<br /> розкриття ключа найкращим відомим алгоритмом), стійкість безключового<br /> читання, імітостойкость (складність нав&#39;язування хибної інформації найкращим<br /> відомим алгоритмом) і ймовірність нав&#39;язування хибної інформації. Це<br /> іноді абсолютно різні поняття, не пов&#39;язані між собою. Деякі<br /> криптосистеми, наприклад RSA, дозволяють нав&#39;язувати хибну інформацію з<br /> складністю, практично не залежить від стійкості ключа. Аналогічно можна<br /> розрізняти стійкість власне криптоалгоритму, стійкість протоколу,<br /> стійкість алгоритму генерації та розповсюдження ключів.<br /> Рівень стійкості залежить від можливостей криптоаналітик і від<br /> користувача. Так, розрізняють криптоаналіз на основі тільки шифрованого<br /> тексту, коли криптоаналітик своєму розпорядженні тільки набором шифрограму і не<br /> знає відкритих текстів, і криптоаналіз на основі відкритого тексту, коли<br /> криптоаналітик знає і відкриття, і відповідні шифровані тексти.<br /> Оскільки криптоалгоритм звичайно повинен бути достатньо універсальним,<br /> природним представляється вимога, щоб стійкість ключа не залежала<br /> від розподілу ймовірностей джерела повідомлень. У загальному випадку джерело<br /> повідомлень може виробляти &quot;зручні&quot; для порушника повідомлення, які<br /> можуть стати йому відомими. У цьому випадку говорять про криптоаналіз на<br /> основі спеціально обраних відкритих текстів. Очевидно, що стійкість<br /> ключа по відношенню до аналізу на основі вибраних текстів не може<br /> перевищувати стійкості по відношенню до аналізу на основі відкритих текстів, а<br /> вона, в свою чергу, не може перевищувати стійкості по відношенню до аналізу<br /> на основі шифрованих текстів. Іноді розробником ЗЗІ допускається навіть,<br /> що ворожий криптоаналітик може мати доступ до криптосистеме, тобто<br /> бути &quot;своїм&quot;.<br /> Зазвичай криптоалгоритми розробляють так, щоб вони були стійкими по<br /> відношенню до криптоаналізу на основі спеціально обраних відкритих текстів.<br /> Поняття &quot;найкращого алгоритму&quot; розкриття ключа у визначенні стійкості<br /> неконструктивно і допускає суб&#39;єктивне тлумачення (для кого-то з<br /> розробників найкращим алгоритмом може бути простою перебір ключів).<br /> Мабуть, ні для одного з використовуваних криптоалгоритмів не визначений<br /> найкращий алгоритм розкриття ключа, тобто задача знаходження найкращого<br /> алгоритму є надзвичайно складною. Тому на практиці для оцінки<br /> стійкості користуються найкращим відомим або знайденим в ході досліджень<br /> алгоритмом розкриття. Таким чином, на практиці ніхто не може перешкодити<br /> здатному криптоаналітик знизити оцінку стійкості, придумавши новий, більш<br /> ефективний метод аналізу.<br /> Створення нових ефективних методів розкриття ключа або іншого методу<br /> ослаблення криптоалгоритму може давати обізнаним особам великі<br /> можливості з нанесення шкоди користувачам, що застосовують даний<br /> криптоалгоритм. Публікація або замовчування цих відомостей определяютс<br /> ступенем відкритості суспільства. Рядовий користувач системи безсилий<br /> перешкодити порушнику у розкритті його ключів.<br /> З викладеного випливає, що поняття &quot;найкращого відомого&quot; алгоритму<br /> неабсолютно: завтра може з&#39;явитися новий більш ефективний алгоритм<br /> розкриття, який призведе до неприпустимого зниження стійкості<br /> криптоалгоритму. З розвитком математики та засобів обчислювальної техніки<br /> стійкість криптоалгоритму може тільки зменшуватися. Для зменшення<br /> можливого збитку, викликаного несвоєчасної заміною криптоалгоритму,<br /> втратив свою стійкість, бажана періодична перевірка<br /> стійкості криптоалгоритму. Для зниження ймовірності непередбачуваного<br /> &quot;Обвалу&quot; знову розробленого криптоалгоритму необхідне проведення<br /> криптографічних досліджень.<br /> З розглянутого вище випливає, що поняття стійкості криптосистеми<br /> багатогранно. Стійкість залежить не тільки від розробника, але і від<br /> особливостей використання даного криптоалгоритму в системі управлени або<br /> зв&#39;язку, від фізичної реалізації криптоалгоритму, а також від майбутніх<br /> успіхів математики і обчислювальної техніки. Адже криптосистема може<br /> експлуатіроватьс багато років, а необхідність зберігати в таємниці протягом<br /> тривалого часу передану раніше по відкритих каналах зв&#39;язку інформацію<br /> може зробити необхідним прогнозувати розвиток науки і техніки на<br /> десятиліття.<br /> 1.3. Необхідність криптоаналізу.<br /> Останні десятиліття характеризується різким збільшенням числа відкритих<br /> робіт з усіх питань криптології, а криптоаналіз стає однією з<br /> найбільш активно розвиваються галузей досліджень. Багато<br /> криптосистеми, стійкість яких не викликала особливих сумнівів, виявилися<br /> успішно розкритими. При цьому розроблений великий арсенал математичних<br /> методів, які являють прямий інтерес для криптоаналітик.<br /> На початку 1970-х рр.. була відома тільки класична одноключевой<br /> криптографія, але число відкритих робіт з цієї тематики було вельми<br /> скромним. Відсутність інтересу до неї можна пояснити цілим рядом причин.<br /> По-перше, гострої потреби в криптосистемах комерційного призначення,<br /> мабуть, ще не відчувалося. По-друге, великий обсяг закритих<br /> досліджень з криптографії бентежило багатьох вчених, яким,<br /> природно, хотілося отримати нові результати. І нарешті, може бути,<br /> самий важливий фактор полягає в тому, що криптоаналіз як наукова<br /> дисципліна фактично, як і раніше представляв собою великий набір<br /> розрізнених &quot;трюків&quot;, не об&#39;єднаних стрункої математичної концепцією.<br /> У 1970-х рр.. ситуація радикально змінилася. По-перше, з розвитком мереж<br /> зв&#39;язку і повсюдним вторгненням ЕОМ необхідність у криптографічного<br /> захист даних стала усвідомлюватися все більш широкими верствами суспільства.<br /> По-друге, винахід Діффі і Хелмана криптографії з відкритим ключем<br /> створило сприятливий грунт для задоволення комерційних потреб в<br /> секретності, усунувши такий істотний недолік класичної<br /> криптографії, як складність поширення ключів. По суті, це<br /> винахід гальванізувати наукове співтовариство, відкривши якісно нову<br /> недосліджену область, яка до того ж обіцяла можливість широкого<br /> впровадження нових результатів швидко розвивається теорії обчислювальної<br /> складності для розробки конкретних систем з простим математичним<br /> описом. Очікувалося, що стійкість таких систем буде надійно спиратися<br /> на нерозв&#39;язність в реальному часі багатьох добре відомих завдань і що,<br /> може бути, з часом вдасться довести принципову нераскриваемость<br /> деяких криптосистем.<br /> Але надії на досягнення доказової стійкості за допомогою зведення задач<br /> криптографії до добре відомим математичним завданням не виправдалася, а,<br /> швидше, навпаки. Саме та обставина, що будь-яке завдання відшукання<br /> способу розкриття деякої конкретної криптосистеми можна<br /> переформулювати як привабливу математичну задачу, при вирішенні<br /> якої удаетс використовувати багато методи тієї ж теорії складності, теорії<br /> чисел і алгебри, призвело до розкриття багатьох криптосистем. На сьогоднішній<br /> день класична стрічка одноразового використання залишається єдиною,<br /> безумовно, стійкою системою шифрування.<br /> Ідеальне доказ стійкості деякої криптосистеми з відкритим<br /> ключем могло б полягати в доведенні того факту, що будь-який алгоритм<br /> розкриття цієї системи, володіє не пренебрежимо малою ймовірністю її<br /> розкриття, пов&#39;язаний з неприйнятно великим обсягом обчислень. І хоча жодна<br /> з відомих систем з відкритим ключем не задовольняє цій сильній<br /> критерієм стійкості, ситуацію не слід розглядати як абсолютно<br /> безнадійну. Було розроблено багато систем, до яких доведено,<br /> що їх стійкість еквівалентна складності рішення деяких важливих завдань,<br /> які майже всіма розглядаються як вкрай складні, таких, наприклад,<br /> як відома завдання розкладання цілих чисел. (Багато хто з розкритих<br /> криптосистем були отримані в результаті ослаблення цих імовірно<br /> стійких систем з метою досягнення великого швидкодії.) Крім того,<br /> результати широких досліджень, що проводилися протягом останніх десяти<br /> років як в самій криптографії, так і в загальній теорії обчислювальної<br /> складності, дозволяють сучасній криптоаналітик набагато глибше зрозуміти,<br /> що ж робить його системи нестійкими.<br /> Проведення криптоаналізі давно існуючих і нещодавно появівшіхс<br /> криптоалгоритмів дуже актуально, так як вчасно можна сказати, що<br /> даний криптоалгоритм нестійкий, та вдосконалити його або замінити новим.<br /> Дл того, щоб виявляти нестійкі криптоалгоритми необхідно весь час<br /> удосконалювати вже відомі методи криптоаналізу і знаходити нові.<br /> 2. Огляд відомих методів криптоаналізу класичних шифрів.<br /> Напрямок криптоаналізу можуть бути різними, відповідно до<br /> напрямками криптографії: це розкриття ключа, нав&#39;язування хибної<br /> інформації за рахунок знаходження слабкостей в криптоалгоритм або протоколі,<br /> можливість нескінченного читання зашифрованої інформації тощо<br /> Криптоалгоритм, як правило, повинен бути стійким по відношенню до<br /> криптоанализу на основі вибраних відкритих текстів. Перша вимога по<br /> суті означає, що розсекречення деякою інформацією,<br /> передавалася по каналу зв&#39;язку в зашифрованому вигляді, не повинно призводити до<br /> розсекреченню іншої інформації, зашифрованої на цьому ключі. Друге<br /> вимога враховує особливості експлуатації апаратури і допускає<br /> деякі вільності з боку оператора або осіб, що мають доступ до<br /> формуванню засекреченої інформації.<br /> Криптоанализ може базуватися на використанні як загальних математичних<br /> результатів (наприклад методів розкладання великих чисел для розкриття<br /> криптосистеми RSA), так і приватних результатів, отриманих для конкретного<br /> криптоалгоритму. Як правило, алгоритми криптоаналізу являютс<br /> імовірнісними.<br /> 2.1. Типові методи криптоаналізу класичних алгоритмів<br /> 2.1.1. Метод зустрічі посередині.<br /> Якщо безліч ключів криптоалгоритму замкнуто щодо композиції, то<br /> Тобто для будь-яких ключів zi і zj знайдеться ключ zk такий, що результат<br /> шифрування будь-якого тексту послідовно на zi і zj дорівнює шифрограмі<br /> цього ж числа на zk, тобто F (zj, F (zi, x)) = F (zk, x), то можна<br /> скористатися цією властивістю. Нехай нам потрібно знайти ключ zk. Тоді для<br /> знаходження ключа zk, необхідно знайти еквівалентну йому пару ключів zi,<br /> zj. Даний метод криптоаналізу заснований на &quot;парадоксі днів народження&quot;.<br /> Відомо, що якщо вважати, що дні народження розподілені рівномірно, то в<br /> групі з 24 осіб з ймовірністю 0,5 у двох осіб дні народження<br /> співпадуть. У загальному вигляді цей парадокс формулюється так: якщо a Ц n<br /> предметів вибираються з поверненням з деякої сукупності розміром n,<br /> то ймовірність того що два з них співпадуть, дорівнює 1-exp (-a2 / 2).<br /> Нехай відомий відкритий текст x і його шифрограма y. Для тексту x будуємо<br /> базу даних, яка містить випадкове безліч ключів z | і відповідних<br /> шифрограму w = F (z |, x), і впорядковуємо її по шифрограма w. Обсяг бази<br /> даних вибираємо О (Ц # {z}). Потім підбираємо випадковим чином ключі z | |<br /> для розшифровки текстів y і результат розшифрування v = F (z | |, y)<br /> порівнюємо з базою даних. Якщо текст v виявиться рівним одній з<br /> шифрограму w, то ключ z | z | | еквівалентний шуканого ключа z. Тимчасова<br /> складність методу складає О (Ц # {z} log # {z}). Множник log # {z}<br /> враховує складність сортування. Необхідна пам&#39;ять дорівнює О (Ц # {z} log # {z})<br /> біт або ОЦ # {z}) блоків (передбачається, що довжина блоку і довжина ключа<br /> розрізняються на обмежену константу).<br /> Цей же метод можна застосовувати, якщо безліч ключів містить досить велике<br /> підмножина, що є напівгруп.<br /> Інше застосування цього методу для безлічі, яка не є напівгруп,<br /> можна продемонструвати на хеш-функції. Наприклад, для підробки підпису<br /> треба знайти два тексти, що володіють одним хеш-образом. Після цього можна<br /> підписане повідомлення замінити на інше, що має таким же хеш-образом.<br /> Пошук двох таких повідомлень можна виконати з використанням методу<br /> &quot;Зустрічі посередині&quot;. Складність пошуку дорівнює О (Ц # {h}), де # {h} &#8211; число<br /> всіляких хеш-образів.<br /> Цей алгоритм є імовірнісним. Однак існують і<br /> детермінований аналог цього алгоритму &quot;giant step &#8211; baby step&quot; з такою<br /> ж складністю, запропонований американським математиком Д. Шенкс.<br /> 2.1.2. Метод Полларда.<br /> Цей імовірнісний метод заснований на наступному факті. Якщо на деякій<br /> кінцевій множині М визначити випадкове відображення f і застосувати його<br /> по черзі до всіх елементів М, а ребрами згiдно з &#8211; y = f (x) для x, YН М.<br /> Оскільки безліч М звичайно, то цей граф повинен містити дерева,<br /> коріння яких з&#39;єднані в цикли. Дл випадкового відображення f довжина циклу<br /> дорівнює О (Ц # М) і висота дерева в середньому дорівнює О (Ц # М).<br /> Для знаходження ключа, наприклад в криптоалгоритм, заснованому на завданні<br /> логарифма на деякій групі, досить вирішити задачу про зустріч на графі<br /> випадкового відображення. Для цього з двох різних стартових точок x0 |, x0 |<br /> | Строятс траєкторія до входу в цикл. Потім одна з двох кінцевих точок,<br /> лежать в циклі, фіксується, а траєкторія інший триває до зустрічі<br /> з фіксованою точкою. Для функції f і точки входу x0 довжина траєкторії<br /> складає О (Ц # М) кроків. Типовий вигляд цієї траєкторії містить<br /> граничний цикл довжини О (Ц # М) і відрізок до входу в цикл приблизно такий же<br /> довжини. Як індикатор замикання траєкторії Поллард запропонував<br /> використовувати рівність xi = x2i, де xi &#8211; i-а точка траєкторії для входу<br /> x0. Це рівність буде виконуватися завжди. Значення індексу i НЕ<br /> перевищує суми довжини шляху до входу в цикл.<br /> У середньому складність перебування рівності xi = x2i дорівнює 3Ц (p / 8) # М.<br /> Складність зустрічі, коли обидві точки лежать в циклі, дорівнює 0,5 Ц (p / 8) # М.<br /> Таким чином, підсумкова складність дорівнює 6,5 Ц (p / 8) # М.<br /> Метод Полларда застосовується для розв&#39;язання задачі логарифма на циклічній<br /> групі, пошуку частково еквівалентних ключів (колізій), для знаходження<br /> двох аргументів, що дають однакове значення хеш-функції, і в деяких<br /> інших випадках. Стосовно до завдання логарифмування цей метод<br /> дозволяє відмовитися від використання великого обсягу пам&#39;яті в порівнянні<br /> з методом зустрічі посередині. Крім того, зникає необхідність<br /> сортування бази даних. У результаті тимчасова складність в порівнянні з<br /> методом зустрічі посередині знижується на множник О (log # М). Складність<br /> цього методу в даному випадку становить О (Ц # М) кроків і вимагає пам&#39;яті<br /> обсягу Про (1) блоків. Однак не завжди требуетс мала пам&#39;ять.<br /> Розглянемо в якості ілюстрації методу Полларда алгоритм знаходження<br /> колізії (двох аргументів, що дають однакове значення хеш-функції) для<br /> обчислювальної моделі з об&#39;ємом пам&#39;яті О (v). Такими аргументами будуть<br /> елементи множини М, стрілки від яких під дією хеш-функції f ведуть<br /> в точку входу в цикл. Практично алгоритм зводиться до знаходження точки<br /> входу в цикл.<br /> 1. Увійти в цикл, використовуючи рівність xi = x2i = t.<br /> 2. Виміряти довжину циклу m, застосовуючи послідовно відображення f до<br /> елементу t до отримання рівності fm (t) = t.<br /> 3. Розбити цикл m на v інтервалів однаковою або близькою довжини і створити<br /> базу даних, запам&#39;ятавши і упорядкувавши початкові точки інтервалів.<br /> 4. Для стартовою вершини п.1 виконувати поодинокі кроки до зустрічі з<br /> будь-якої точкою з бази даних п.3. Відзначити початкову та кінцеву точки<br /> інтервалу, на якому відбулася зустріч.<br /> 5. Стерти попередню і створити нову базу даних з v точок, розбивши<br /> інтервал, на якому відбулася зустріч, на рівні по довжині частини, запам&#39;ятавши<br /> і відсортувавши початкові точки інтервалів.<br /> 6. Повторити процедури пп.4, 5 до тих пір, поки не вийде довжина<br /> інтервалу, що дорівнює 1. Обчислити точку зустрічі в циклі, обчислити колізію<br /> як пару вершин, одна з яких лежить в циклі, а друга &#8211; ні.<br /> Цей алгоритм вимагає багатократного виконання О (Ц # М) кроків до входу в<br /> цикл і виконання сортування бази даних. На кожному етапі при створенні<br /> нової бази даних довжина інтервалу скорочується в v разів, тобто кількість<br /> повторів одно О (logv # М). Якщо v H +1 визначається ймовірністю непотрапляння на глибину<br /> H +1 і шириною графа, р (h | H) = O (H-1h-2).<br /> Порівняємо ймовірність pk (h) получені глибини h після k кроків при спуску від<br /> аркуша і ймовірність pk (h | Mk-1) глибини h після k кроків за умови, що на<br /> кроці k-1 глибина дорівнювала математичного сподівання. Має місце оцінка<br /> pk (h) »pk (h | Mk-1). Тому місце ймовірності складної події pk (h) можна<br /> розглядати ймовірність простої події pk (h | Mk-1).<br /> Нехай стартова вершина лежить на глибині H = O (log # M). Яка буде глибина<br /> після чергового кроку? Безпосередні обчислення показують, що<br /> математичне сподівання глибини одно H +1 + O (1), тобто другий і<br /> подальший кроки збільшують глибину спуску на О (1). Підстановка в<br /> За вихідну глибини математичного очікування глибини спуску на<br /> попередньому кроці дає оцінку математичного очікування глибини спуску після<br /> до кроків: h = O (log # M) + O (k).<br /> Оскільки оптимальне число кроків при спуску до алгоритму визначається<br /> рівністю складності спуску mk і складності сортування m log m, то<br /> копт = O (log # M). Звідси випливає, що завдання зустрічі на випадковому<br /> орієнтованому дереві не менш складна, ніж завдання про зустріч в циклі, то<br /> є алгоритм Полларда не покращуємо за рахунок збільшення доступної пам&#39;яті.<br /> 2.1.3. Диференціальний метод криптоаналізу.<br /> Диференціальний метод криптоаналізу (ДКА) був запропонований Е. Біхамом і<br /> А. Шамір в 1990 р. Диференціальний криптоаналіз &#8211; це спроба розтину<br /> секретного ключа блокових шифрів, які засновані на повторному застосуванні<br /> криптографічно слабкою цифровий операцій шифрування r разів. При аналізі<br /> передбачається, що на кожному циклі використовується свій підключ шифрування.<br /> ДКА може використовувати як вибрані, так і відомі відкриті тексти.<br /> Успіх таких спроб розтину r-циклічного шифру залежить від існування<br /> диференціалів (r-1)-го циклу, які мають велику ймовірність.<br /> Диференціал i-го циклу визначається як пара (a, b) i така, що пара<br /> різних відкритих текстів x, x * c різницею a може призвести до пари<br /> вихідних текстів y, y * після i-ого циклу, що мають різницю b (дл<br /> відповідного поняття різниці). Імовірність i-циклового диференціала<br /> (A, b) i &#8211; це умовна ймовірність P (D y (i) = b | D x = a) того, що<br /> різниця D y (i) пари шифротекст (y, y *) після i-ого циклу дорівнює b при<br /> умови, що пара текстів (x, x *) має різницю D x = a; відкритий текст x<br /> і підключи циклів до (1), до (2) ,&#8230;., до (i) незалежними і рівноімовірними.<br /> Основна процедура ДКА r-циклічного шифру з використанням вибраних<br /> відкритих текстів може бути наступною:<br /> 1. На етапі передобчислювання шукаємо безліч (r-1)-циклових диференціалів (a<br /> 1, b 1) r-1, (a 2, b 2) r-1 ,&#8230;. (As, bs) r-1. Упорядковуємо це безліч<br /> диференціалів за величиною їх ймовірності.<br /> 2. Вибираємо відкритий текст x довільним чином і обчислюємо x * так,<br /> щоб різниця між x і x * дорівнювала a 1. Тексти<br /> x і x * шифрується на дійсному ключі і після r циклів отримуємо пару<br /> шифртекст y (r), y * (r). Припускаємо, що на виході передостаннього<br /> (R-1)-ого циклу різниця шифртекст дорівнює найбільш вірогідною: D y (r-1) = b<br /> 1. Для трійки (D y (r-1), y (r), y * (r)) знаходимо кожне можливе (якщо їх<br /> декілька) значення підключа останнього циклу до (r). Додаємо його до<br /> кількості появ кожного такого значення підключа до (r).<br /> 3. Повторюємо п.2 до тих пір, поки одне або кілька значень підключа<br /> к (r) не стане з&#39;являтися частіше за інших. Беремо цей з&#39;єднання або безліч<br /> таких підключений як криптографічного рішення для підключа до (r).<br /> 4. Повторюємо пп.1-3 для передостаннього циклу, при цьому значення y (r-1)<br /> обчислюються розшифрування шифртекст на знайденому підключення останнього<br /> циклу до (r). Далі діємо аналогічно, поки не будуть розкриті ключі всіх<br /> циклів шифрування.<br /> Запропонований вперше для аналізу конкретного шифру, ДКА виявився<br /> застосовним для аналізу широкого класу марковських шифрів. Марківським<br /> називається шифр, у якого рівняння шифрування на одному циклі<br /> задовольняє умові: ймовірність диференціала не залежить від вибору<br /> відкритих текстів. Тоді, якщо підключи циклів незалежні, то<br /> послідовність різниць після кожного циклу утворює Марковську ланцюг,<br /> де подальший стан визначається тільки попереднім. Прикладами<br /> марковських шифрів являютс DES і FEAL.<br /> Можна показати, що марковський r-циклових шифр з незалежними підключили<br /> є вразливим для ДКА тоді і тільки тоді, коли для одного циклу<br /> шифрування ключ за відомою трійці (y, y *, D x) може бути легко обчислений,<br /> і існує (r-1)-циклової диференціал (a, b) к-1 такий, що його<br /> ймовірність задовольняє умові P (D y (r-1) = b | D x = a)&gt;&gt; 2-n,<br /> де n-кількість біт у блоці шіфруемого тексту.<br /> Складність розкриття ключа r-циклічного шифру Q (r) визначається як число<br /> використовуваних шифрувань з наступним обчисленням ключа: Q (r) і 2 / (Pmax &#8211;<br /> 1/(2n-1)),<br /> де Pmax = max (a) max (b) (P (D y (r-1) = b | D x = a)).<br /> Зокрема, якщо Pmax »1 / (2n-1), то атака не буде успішною. Оскільки<br /> обчислення підключа &#8211; більш трудомістка операція, ніж шифрування, то<br /> одиницею вимірювання складності є складність перебування можливих<br /> підключений одного циклу з відомим (D y (r-1), y (r), y * (r)).<br /> Відмінною рисою диференціального аналізу є те, що він<br /> практично не використовує алгебраїчні властивості шифру (лінійність,<br /> аффінность, транзитивність, замкнутість і т.п.), а заснований лише на<br /> нерівномірності розподілу ймовірності диференціалів.<br /> 1.4. Лінійний метод криптоаналізу.<br /> У відкритій пресі лінійної метод криптоаналізу вперше був запропонований<br /> японським математиком Мацуї. Метод передбачає, що криптоаналітик знає<br /> відкриті та відповідні зашифровані тексти.<br /> Зазвичай при шифруванні використовується додавання за модулем 2 тексту з ключем і<br /> операції розсіювання і перемішування. Завдання криптоаналітик &#8211; знайти<br /> найкращу лінійну апроксимацію (після всіх циклів шифрування) висловлювання<br /> xi1+ &#8230;. + xir + yj1 + yjs=zk1 + &#8230;. + zk t (3.1)<br /> Нехай pL &#8211; імовірність того, що (3.1) виконується, при цьому необхідно,<br /> щоб pL № 1 / 2 і величина | pL-1 / 2 | повинна бути максимальна. Якщо |<br /> pL-1 / 2 | досить велика і криптоаналітик відомо достатнє число<br /> пар відкритих і відповідних зашифрованих текстів, то сума за модулем 2<br /> біт ключа на відповідній позиції у правій частині (3.1) дорівнює найбільш<br /> ймовірному значенню суми за модулем 2 відповідних біт відкритих і<br /> зашифрованих текстів у лівій частині. Якщо pL&gt; 1 / 2, то сума біт ключа в<br /> правій частині (3.1) дорівнює нулю, якщо сума біт в лівій частині дорівнює нулю<br /> більше, ніж для половини пар зашифрованих текстів, і сума біт ключа в<br /> правій частині (3.1) дорівнює одиниці, якщо сума біт в лівій частині дорівнює<br /> одиниці більше, ніж для половини текстів. Якщо pL</p> <div class="ad-top2"> <!-- Top article #956715 --> <script>(function(e){var t="DIV_DA_"+e+"_"+parseInt(Math.random()*1e3); document.write('<div id="'+t+'" class="directadvert-block directadvert-block-'+e+'"></div>'); if("undefined"===typeof loaded_blocks_directadvert){loaded_blocks_directadvert=[]; function n(){var e=loaded_blocks_directadvert.shift(); var t=e.adp_id; var r=e.div; var i=document.createElement("script"); i.type="text/javascript"; i.async=true; i.charset="windows-1251"; i.src="//code.directadvert.ru/data/"+t+".js?async=1&div="+r+"&t="+Math.random(); var s=document.getElementsByTagName("head")[0]||document.getElementsByTagName("body")[0]; s.appendChild(i); var o=setInterval(function(){if(document.getElementById(r).innerHTML&&loaded_blocks_directadvert.length){n(); clearInterval(o)}},50)} setTimeout(n)}loaded_blocks_directadvert.push({adp_id:e,div:t})})(956715)</script> </div> <div style="float:right"> <div class="yashare-auto-init" data-yashareL10n="ua" data-yashareType="icon" data-yashareQuickServices="yaru,vkontakte,facebook,twitter,odnoklassniki,moimir,lj,moikrug,gplus"></div> </div> <h4>Схожі статті:</h4><ul><li><a href="http://easy-code.com.ua/2010/12/sekreti-stvorennya-velikogo-spisku-rozsilki/" title="Секрети створення великого списку розсилки.">Секрети створення великого списку розсилки.</a> (0)</li><li><a href="http://easy-code.com.ua/2010/11/veb-2-0-privertaye-vse-bilshe-uvagi/" title="Веб 2.0 привертає все більше уваги.">Веб 2.0 привертає все більше уваги.</a> (0)</li><li><a href="http://easy-code.com.ua/2010/11/slovo-na-zaxist-yandeksa/" title="Слово на захист Яндекса">Слово на захист Яндекса</a> (0)</li><li><a href="http://easy-code.com.ua/2010/11/yak-stati-vidminnim-dizajnerom-50-rad/" title="Як стати відмінним дизайнером. 50 рад.">Як стати відмінним дизайнером. 50 рад.</a> (1)</li><li><a href="http://easy-code.com.ua/2010/12/web-2-0-dlya-dizajneriv/" title="Web 2.0 для дизайнерів.">Web 2.0 для дизайнерів.</a> (0)</li><li><a href="http://easy-code.com.ua/2010/11/web-2-0-i-biznes/" title="Web 2.0 і бізнес">Web 2.0 і бізнес</a> (0)</li><li><a href="http://easy-code.com.ua/2010/11/dizajn-voyennogo-chasu/" title="Дизайн воєнного часу">Дизайн воєнного часу</a> (0)</li></ul> <!--for paginate posts--> <hr/> <p><strong><em> Сподобалася стаття? Ви можете <a href="#comments"> залишити відгук </a> або <a href = "http://easy-code.com.ua/feed/" > підписатися на RSS </a>, щоб автоматично отримувати інформацію про нові статтях. </em></strong></p> <!--Post Meta--> <div class="post-meta"> <strong>Метки: </strong><a href="http://easy-code.com.ua/tag/dorivnyuye/" rel="tag">дорівнює</a>, <a href="http://easy-code.com.ua/tag/kriptoalgoritmu/" rel="tag">криптоалгоритму</a>, <a href="http://easy-code.com.ua/tag/osnovi/" rel="tag">основі</a>, <a href="http://easy-code.com.ua/tag/stijkist/" rel="tag">стійкість</a>, <a href="http://easy-code.com.ua/tag/tilki/" rel="tag">тільки</a>, <a href="http://easy-code.com.ua/tag/tekstiv/" rel="tag">текстів</a>, <a href="http://easy-code.com.ua/tag/shifruvannya/" rel="tag">шифрування</a><br /> <strong>Рубрики:</strong> <a href="http://easy-code.com.ua/category/kriptografiya/" rel="category tag">Криптографія</a> </div> <!--include comments template--> <div id="comments-wrap"> <p>Коментарів поки що немає.</p> <!-- <p><a href="http://easy-code.com.ua/2010/11/metodi-kriptoanalizu/feed/">RSS-стрічка коментарів.</a> <a href="http://easy-code.com.ua/2010/11/metodi-kriptoanalizu/trackback/" rel="trackback">Адреса для трекбек</a> </p> --> <h3 class="postcomment">Ваш отзыв</h3> <p>Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <code>&lt;a href=&quot;&quot; title=&quot;&quot;&gt; &lt;abbr title=&quot;&quot;&gt; &lt;acronym title=&quot;&quot;&gt; &lt;b&gt; &lt;blockquote cite=&quot;&quot;&gt; &lt;cite&gt; &lt;code&gt; &lt;del datetime=&quot;&quot;&gt; &lt;em&gt; &lt;i&gt; &lt;q cite=&quot;&quot;&gt; &lt;s&gt; &lt;strike&gt; &lt;strong&gt; </code></p> <form action="http://easy-code.com.ua/wp-comments-post.php" method="post" id="commentform"> <p> <input type="text" name="author" id="author" class="textarea" value="" size="28" tabindex="1" /> <label for="author">Им'я</label> * </p> <p> <input type="text" name="email" id="email" value="" size="28" tabindex="2" /> <label for="email">E-mail</label> * </p> <p> <input type="text" name="url" id="url" value="" size="28" tabindex="3" /> <label for="url">Сайт</label> </p> <p> <label for="comment">Повідомлення</label> <br /> <textarea name="comment" id="comment" cols="60" rows="10" tabindex="4"></textarea> </p> <p> <input name="submit" id="submit" type="submit" tabindex="5" value="відправити" /> <input type="hidden" name="comment_post_ID" value="3365" /> <input type="hidden" name="redirect_to" value="/2010/11/metodi-kriptoanalizu/" /> </p> <p style="display: none;"><input type="hidden" id="akismet_comment_nonce" name="akismet_comment_nonce" value="155e39d067" /></p><p style="display: none;"><input type="hidden" id="ak_js" name="ak_js" value="140"/></p></form> </div> <!--do not delete--> <!--single.php end--> </div> <!--include sidebar--> <!--sidebar.php--> <div id="sidebar"> <div class="sidebar-rss"> <h3>Подписка через RSS</h3> <p><a href="http://easy-code.com.ua/feed/"><img src="http://easy-code.com.ua/wp-content/themes/elegantblue/images/rss.jpg" alt="Подписка на RSS" ></img></a>Якщо вам сподобалася інформація на нашому сайті, ви можете підписатися на оновлення через RSS.</p> </div> <BR> <div class="something"> <a href='http://easy-code.com.ua/tag/download/' class='tag-link-563 tag-link-position-1' title='648 topics' style='font-size: 12.328358208955pt;'>Download</a> <a href='http://easy-code.com.ua/tag/microsoft/' class='tag-link-66 tag-link-position-2' title='772 topics' style='font-size: 13.522388059701pt;'>Microsoft</a> <a href='http://easy-code.com.ua/tag/oracle/' class='tag-link-18322 tag-link-position-3' title='357 topics' style='font-size: 8.4477611940299pt;'>Oracle</a> <a href='http://easy-code.com.ua/tag/windows/' class='tag-link-18319 tag-link-position-4' title='1,383 topics' style='font-size: 17.253731343284pt;'>Windows</a> <a href='http://easy-code.com.ua/tag/internet/' class='tag-link-132 tag-link-position-5' title='366 topics' style='font-size: 8.5970149253731pt;'>Інтернет</a> <a href='http://easy-code.com.ua/tag/merezhi/' class='tag-link-143 tag-link-position-6' title='438 topics' style='font-size: 9.7910447761194pt;'>Мережі</a> <a href='http://easy-code.com.ua/tag/modeli/' class='tag-link-530 tag-link-position-7' title='360 topics' style='font-size: 8.5970149253731pt;'>моделі</a> <a href='http://easy-code.com.ua/tag/mozhete/' class='tag-link-3 tag-link-position-8' title='569 topics' style='font-size: 11.582089552239pt;'>можете</a> <a href='http://easy-code.com.ua/tag/mozhut/' class='tag-link-311 tag-link-position-9' title='384 topics' style='font-size: 9.044776119403pt;'>можуть</a> <a href='http://easy-code.com.ua/tag/dopomogoyu/' class='tag-link-273 tag-link-position-10' title='731 topics' style='font-size: 13.074626865672pt;'>допомогою</a> <a href='http://easy-code.com.ua/tag/dozvolyaye/' class='tag-link-542 tag-link-position-11' title='664 topics' style='font-size: 12.477611940299pt;'>дозволяє</a> <a href='http://easy-code.com.ua/tag/kompani%d1%97/' class='tag-link-554 tag-link-position-12' title='546 topics' style='font-size: 11.283582089552pt;'>компанії</a> <a href='http://easy-code.com.ua/tag/koristuvachiv/' class='tag-link-137 tag-link-position-13' title='337 topics' style='font-size: 8.1492537313433pt;'>користувачів</a> <a href='http://easy-code.com.ua/tag/potribno/' class='tag-link-18 tag-link-position-14' title='566 topics' style='font-size: 11.432835820896pt;'>потрібно</a> <a href='http://easy-code.com.ua/tag/programi/' class='tag-link-387 tag-link-position-15' title='1,547 topics' style='font-size: 18pt;'>програми</a> <a href='http://easy-code.com.ua/tag/prosto/' class='tag-link-99 tag-link-position-16' title='328 topics' style='font-size: 8pt;'>просто</a> <a href='http://easy-code.com.ua/tag/vikoristannya/' class='tag-link-690 tag-link-position-17' title='368 topics' style='font-size: 8.7462686567164pt;'>використання</a> <a href='http://easy-code.com.ua/tag/vikoristovuvati/' class='tag-link-890 tag-link-position-18' title='427 topics' style='font-size: 9.6417910447761pt;'>використовувати</a> <a href='http://easy-code.com.ua/tag/znachennya/' class='tag-link-198 tag-link-position-19' title='1,003 topics' style='font-size: 15.164179104478pt;'>значення</a> <a href='http://easy-code.com.ua/tag/roboti/' class='tag-link-123 tag-link-position-20' title='1,104 topics' style='font-size: 15.761194029851pt;'>роботи</a> <a href='http://easy-code.com.ua/tag/rozrobki/' class='tag-link-1235 tag-link-position-21' title='328 topics' style='font-size: 8pt;'>розробки</a> <a href='http://easy-code.com.ua/tag/sistemi/' class='tag-link-476 tag-link-position-22' title='1,131 topics' style='font-size: 15.910447761194pt;'>системи</a> <a href='http://easy-code.com.ua/tag/upravlinnya/' class='tag-link-556 tag-link-position-23' title='760 topics' style='font-size: 13.373134328358pt;'>управління</a> <a href='http://easy-code.com.ua/tag/server/' class='tag-link-197 tag-link-position-24' title='650 topics' style='font-size: 12.328358208955pt;'>сервер</a> <a href='http://easy-code.com.ua/tag/stvorennya/' class='tag-link-439 tag-link-position-25' title='460 topics' style='font-size: 10.089552238806pt;'>створення</a> <a href='http://easy-code.com.ua/tag/tablici/' class='tag-link-496 tag-link-position-26' title='469 topics' style='font-size: 10.238805970149pt;'>таблиці</a> <a href='http://easy-code.com.ua/tag/tilki/' class='tag-link-6 tag-link-position-27' title='1,295 topics' style='font-size: 16.805970149254pt;'>тільки</a> <a href='http://easy-code.com.ua/tag/fajliv/' class='tag-link-293 tag-link-position-28' title='410 topics' style='font-size: 9.3432835820896pt;'>файлів</a> <a href='http://easy-code.com.ua/tag/funkci%d1%97/' class='tag-link-218 tag-link-position-29' title='439 topics' style='font-size: 9.7910447761194pt;'>функції</a> <a href='http://easy-code.com.ua/tag/informaci%d1%97/' class='tag-link-24 tag-link-position-30' title='368 topics' style='font-size: 8.7462686567164pt;'>інформації</a></div> <!--l_sidebar.php--> <div id="l_sidebar"> <ul> <br> <!--favorite posts--> <li> <h2>Нове на сайті</h2> <ul> <li><a href='http://easy-code.com.ua/2015/11/keruyuchi-klavishi-i-menyu-informix/'>Керуючі клавіші і меню INFORMIХ</a></li> <li><a href='http://easy-code.com.ua/2015/10/vipushheno-reliz-fastreport-fmx/'>Випущено реліз FastReport FMX</a></li> <li><a href='http://easy-code.com.ua/2015/10/oracle/'>Oracle</a></li> <li><a href='http://easy-code.com.ua/2015/09/func-hgi-35i-vertolit-z-keruvannyam-vid-iphone/'>Func HGI-35i: вертоліт з керуванням від iPhone</a></li> <li><a href='http://easy-code.com.ua/2015/08/faq-po-grafiku-i-animaciyu-dlya-web/'>FAQ по графіку і анімацію для Web</a></li> <li><a href='http://easy-code.com.ua/2015/07/funkciya-viznachennya-kilkosti-robochix-dniv/'>Функція визначення кількості робочих днів</a></li> <li><a href='http://easy-code.com.ua/2015/07/inshi-mozhlivosti-obyednannya-fajliv/'>Інші можливості об&#8217;єднання файлів</a></li> <li><a href='http://easy-code.com.ua/2015/07/oglyad-navushnikiv-z-aktivnim-shumozaglushennyam-asus-nc1/'>Огляд навушників з активним шумозаглушенням ASUS NC1</a></li> <li><a href='http://easy-code.com.ua/2015/06/net-service-oriented-architecture-soa/'>.NET: Service Oriented Architecture (SOA)</a></li> <li><a href='http://easy-code.com.ua/2015/06/oglyad-behold-betab-7004/'>Огляд Behold BeTAB 7004</a></li> </ul> </li> <li> <h2>Реклама</h2> <ul> <div class="adcontentcen1"> <!-- Sidebar 160x600 #956693 --> <script>(function(e){var t="DIV_DA_"+e+"_"+parseInt(Math.random()*1e3); document.write('<div id="'+t+'" class="directadvert-block directadvert-block-'+e+'"></div>'); if("undefined"===typeof loaded_blocks_directadvert){loaded_blocks_directadvert=[]; function n(){var e=loaded_blocks_directadvert.shift(); var t=e.adp_id; var r=e.div; var i=document.createElement("script"); i.type="text/javascript"; i.async=true; i.charset="windows-1251"; i.src="//code.directadvert.ru/data/"+t+".js?async=1&div="+r+"&t="+Math.random(); var s=document.getElementsByTagName("head")[0]||document.getElementsByTagName("body")[0]; s.appendChild(i); var o=setInterval(function(){if(document.getElementById(r).innerHTML&&loaded_blocks_directadvert.length){n(); clearInterval(o)}},50)} setTimeout(n)}loaded_blocks_directadvert.push({adp_id:e,div:t})})(956693)</script> </div> </ul> </li> </ul> </div> <!--l_sidebar.php end--> <!--r_sidebar.php--> <div id="r_sidebar"> <ul> <br> <li> <h2>Популярне</h2> <ul> <!-- 2017-09-21 10:45:04 --> <li><a href="http://easy-code.com.ua/2010/10/klasifikaciya-veb-resursiv/">Класифікація веб-ресурсів (8)</a></li> <li><a href="http://easy-code.com.ua/2012/08/analiz-ta-proektuvannya-vizualne-modelyuvannya-uml-rational-rose-case-zasobi-modelyuvannya-programuvannya-statti/">Аналіз та проектування. Візуальне моделювання (UML) Rational Rose, CASE-засоби (моделювання), Програмування, статті (10)</a></li> <li><a href="http://easy-code.com.ua/2012/09/yak-vidaliti-numeraciyu-storinok-ms-office-programni-kerivnictva-statti/">Як видалити нумерацію сторінок, MS Office, Програмні керівництва, статті (8)</a></li> <li><a href="http://easy-code.com.ua/2012/08/oblikova-politika-vnutrishnofirmovi-standarti-upravlinskogo-obliku-komerciya-rizne-statti/">Облікова політика. Внутрішньофірмові стандарти управлінського обліку, Комерція, Різне, статті (16)</a></li> <li><a href="http://easy-code.com.ua/2012/08/yak-zminiti-mizhbukvenij-interval-ms-office-programni-kerivnictva-statti/">Як змінити міжбуквений інтервал, MS Office, Програмні керівництва, статті (26)</a></li> <li><a href="http://easy-code.com.ua/2014/07/stvorennya-panelej-instrumentiv-i-menyu/">Створення панелей інструментів і меню (8)</a></li> <li><a href="http://easy-code.com.ua/2011/08/svitovij-rinok-sistem-elektronnogo-dokumentoobigu/">Світовий ринок систем електронного документообігу (6)</a></li> <li><a href="http://easy-code.com.ua/2012/08/modelyuvannya-texnichnix-sistem-c-allfusion-process-modeler-ranishe-bpwin-komerciya-rizne-statti/">Моделювання технічних систем c AllFusion Process Modeler (раніше BPwin), Комерція, Різне, статті (10)</a></li> <li><a href="http://easy-code.com.ua/2011/04/panel-instrumentiv-formi-u-word/">Панель інструментів ФОРМИ у Word (18)</a></li> <li><a href="http://easy-code.com.ua/2011/03/corel-draw-redaguvannya-i-vidilennya/">Corel Draw: Редагування і виділення (7)</a></li> <li><a href="http://easy-code.com.ua/2011/03/robota-z-fajlami-v-komandnomu-ryadku-operacijnix-sistem/">Робота з файлами в командному рядку операційних систем. (13)</a></li> <li><a href="http://easy-code.com.ua/2012/08/case-zasobi-zagalna-xarakteristika-i-klasifikaciya-komerciya-rizne-statti/">CASE-засоби. Загальна характеристика і класифікація, Комерція, Різне, статті (12)</a></li> <li><a href="http://easy-code.com.ua/2012/08/vstavka-i-peremishhennya-zobrazhen-v-word-2010-ms-office-programni-kerivnictva-statti/">Вставка і переміщення зображень в Word 2010, MS Office, Програмні керівництва, статті (15)</a></li> <li><a href="http://easy-code.com.ua/2011/01/recenzuvannya-dokumentiv-u-word/">Рецензування документів у Word (22)</a></li> <li><a href="http://easy-code.com.ua/2012/08/yak-vstaviti-alfavitnij-predmetnij-pokazhchik-v-dokument-ms-office-programni-kerivnictva-statti/">Як вставити алфавітний (предметний) покажчик в документ, MS Office, Програмні керівництва, статті (11)</a></li> <li><a href="http://easy-code.com.ua/2010/12/programuvannya-na-movi-delphi-glava-7-proekt-programi/">Програмування на мові Delphi. Глава 7. Проект програми (16)</a></li> <li><a href="http://easy-code.com.ua/2012/08/gibernaciya-son-i-gibridnij-splyachij-rezhim-v-windows-7-pitannya-i-vidpovidi-windows-operacijni-sistemi-statti/">Гібернація, сон і гібридний сплячий режим в Windows 7 &#8211; питання і відповіді, Windows, Операційні системи, статті (9)</a></li> <li><a href="http://easy-code.com.ua/2012/09/zasobi-rozrobki-dodatkiv-rizne-programuvannya-statti/">Засоби розробки додатків, Різне, Програмування, статті (9)</a></li> <li><a href="http://easy-code.com.ua/2012/07/opis-biznes-procesiv-sadt-idef0-idef3-dfd-uml-aris-case-zasobi-modelyuvannya-programuvannya-statti/">Опис бізнес-процесів: SADT, IDEF0, IDEF3, DFD, UML, ARIS, CASE-засоби (моделювання), Програмування, статті (20)</a></li> <li><a href="http://easy-code.com.ua/2012/08/nalashtuvannya-ekrannix-zastavok-v-windows-7-za-dopomogoyu-reyestru-windows-operacijni-sistemi-statti/">Налаштування екранних заставок в Windows 7 за допомогою реєстру, Windows, Операційні системи, статті (26)</a></li> <!-- 2017-09-21 10:45:04 --></ul> </li> </ul> </div> <!--r_sidebar.php end--> </div> <!--sidebar.php end--><!--include footer--> </div> <div id="footer"> <p> При використанні матеріалів даного сайту пряме і явне посилання на сайт <a href="http://www.easy-code.com.ua/"> www.easy-code.com.ua </a> є обов'язковим. </p> <!--footer.php--> <div id="footer-wrap"> <noindex> <!--LiveInternet counter--><script type="text/javascript"><!-- document.write("<a href='http://www.liveinternet.ru/click' "+ "target=_blank><img src='//counter.yadro.ru/hit?t19.6;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+ ";"+Math.random()+ "' alt='' title='LiveInternet: показано число просмотров за 24"+ " часа, посетителей за 24 часа и за сегодня' "+ "border='0' width='88' height='31'><\/a>") //--></script><!--/LiveInternet--> <!-- Yandex.Metrika counter --> <div style="display:none;"><script type="text/javascript"> (function(w, c) { (w[c] = w[c] || []).push(function() { try { w.yaCounter10604395 = new Ya.Metrika({id:10604395, enableAll: true}); } catch(e) { } }); })(window, "yandex_metrika_callbacks"); </script></div> <script src="//mc.yandex.ru/metrika/watch.js" type="text/javascript" defer="defer"></script> <noscript><div><img src="//mc.yandex.ru/watch/10604395" style="position:absolute; left:-9999px;" alt="" /></div></noscript> <!-- /Yandex.Metrika counter --> <script type="text/javascript" src="//yandex.st/share/share.js" charset="utf-8"></script> <script type="text/javascript" src="https://apis.google.com/js/plusone.js"> {lang: 'ru'} </script> </noindex> <BR><strong>ЕasyСode</strong> <!--necessary--> <script type='text/javascript' src='http://easy-code.com.ua/wp-content/plugins/akismet/_inc/form.js?ver=3.3'></script> <script type='text/javascript' src='http://easy-code.com.ua/wp-includes/js/wp-embed.min.js?ver=4.7.7'></script> <script type='text/javascript' src='http://easy-code.com.ua/wp-includes/js/jquery/jquery.js?ver=1.12.4'></script> <script type='text/javascript' src='http://easy-code.com.ua/wp-includes/js/jquery/jquery-migrate.min.js?ver=1.4.1'></script> <script type='text/javascript' src='http://easy-code.com.ua/wp-content/plugins/easy-fancybox/fancybox/jquery.fancybox-1.3.8.min.js?ver=1.5.8.2'></script> <script type='text/javascript' src='http://easy-code.com.ua/wp-content/plugins/easy-fancybox/js/jquery.easing.min.js?ver=1.3.2'></script> <script type='text/javascript' src='http://easy-code.com.ua/wp-content/plugins/easy-fancybox/js/jquery.mousewheel.min.js?ver=3.1.12'></script> <script type="text/javascript"> jQuery(document).on('ready post-load', function(){ jQuery('.nofancybox,a.pin-it-button,a[href*="pinterest.com/pin/create/button"]').addClass('nolightbox'); }); jQuery(document).on('ready post-load',easy_fancybox_handler); jQuery(document).on('ready',easy_fancybox_auto);</script> </div> </div> <div class="soc-buttons"> <div class="yashare-auto-init" data-yashareL10n="ru" data-yashareQuickServices="vkontakte,facebook,twitter,odnoklassniki,moimir,gplus" data-yashareTheme="counter"></div> </div> <script>!window.jQuery && document.write('<script src="http://yastatic.net/jquery/2.1.3/jquery.min.js"><\/script>');</script> <script src="http://easy-code.com.ua/wp-content/themes/elegantblue/js/jquery.hc-sticky.min.js"></script> <script> jQuery(document).ready(function($){ $('.soc-buttons').hcSticky({ top: 25, bottomEnd: 90, wrapperClassName: 'sidebar-sticky2', noContainer: false }); }); </script> <script type="text/javascript" src="//yastatic.net/share/share.js" charset="utf-8"></script> </body> </html>