Методи криптоаналізу, Криптографія, Security & Hack, статті

www.hackerz.ru

1.1. Термінологія і вихідні допущення. Криптологія досить чітко ділиться на дві частини: криптографію (шифрування) і криптоаналіз. Криптограф намагається знайти методи забезпечення секретності і (або) автентичності (достовірності) повідомлень. Криптоаналітика намагається виконати зворотну задачу, розкриваючи шифр або підроблюючи кодовані сигнали таким чином, щоб вони були прийняті як справжні. Початкове повідомлення, якому криптограф застосовує своє мистецтво, називається відкритим текстом, а результат його роботи &#8211; шифрованих текстом повідомлення &#8211; шифртекста, або криптограми. Для управління процесом шифрування криптограф завжди використовує секретний ключ. Часто (але не завжди) він передає цей секретний ключ небудь надійним способом (наприклад, в &#8220;Дипломаті&#8221;, пристебнутий наручниками до руки кур&#8217;єра) людині (або машині), якому він збирається пізніше послати криптограму, складену з використанням цього ключа. Майже загальноприйняте допущення в криптографії полягає в тому, що криптоаналітика противника має повний текст криптограми. Крім того, криптограф майже завжди керується правилом, вперше сформульованим голландцем Керкхоффом: стійкість шифру повинна визначатися тільки секретністю ключа. Іншими словами, правило Керкхоффом полягає в тому, що весь механізм шифрування, крім значени секретного ключа, відомий криптоаналітика противника. Якщо криптограф приймає тільки ці два допущення, то він розробляє систему, стійку при аналізі на основі тільки шифрованого тексту. Якщо до того ж криптограф допускає, що криптоаналітика противника зможе дістати кілька уривків відкритого тексту і відповідного йому шифрованого тексту, утвореного з використанням секретного ключа, то розробляється система, стійка при аналізі на основі відкритого тексту. Криптограф може навіть допустити, що криптоаналітика противника здатний ввести свій відкритий текст і отримати правильну криптограму, утворену з використанням секретного ключа (Аналіз на основі обраного відкритого тексту), або припустити, що криптоаналітика противника може підставити фіктивні криптограми і отримати текст, в який вони перетворюються при розшифрування (аналіз на основі обраного шифртекста), або допустити обидві ці можливості (аналіз на основі вибраного тексту). Розробники більшості сучасних шифрів забезпечують їх стійкість до аналізу на основі обраного відкритого тексту навіть в тому випадку, коли передбачається, що криптоаналітика противника зможе вдатися до аналізу на основі шифртекста. 1.2. Завдання криптографії. Поняття стійкості криптографічного алгоритму. Криптологія &#8211; &#8220;особлива&#8221; область досліджень. Про досягнення цієї науки все частіше повідомляють не тільки наукові, але й науково-популярні журнали і звичайна преса. За кордоном в останні роки спостерігається небувалий бум в області криптології. Це пов&#8217;язано з тим, що її досягнення стали пріменятьс НЕ тільки у вузьких відомчих колах, а й у життя мільйонів громадян. Широке впровадження обчислювальних систем привело до того, що вони становитс привабливими для різного роду інформаційних нападів. Це облегчаетс тим, що інформація виявилася позбавленою свого фізичного втілення, як було раніше (наприклад, текст написаний на папері і підписано автором). Відсутність такого фізичного втілення, поєднане з неможливістю аутентифікації його автора, відкрило шлях до різного роду порушень. У зв&#8217;язку з цим з&#8217;явилася необхідність не тільки в забезпеченні конфіденційності, а й в забезпеченні контролю автентичності та цілісності інформації. Крім того, зростання цінності інформації та інформатизація суспільства ставлять питання розмежування доступу до інформації (наприклад, якщо користувач не сплатив роботу з базою знань) та питання захисту від комп&#8217;ютерного тероризму. На сьогоднішній день така захист здійснюється ефективно з використанням засобів криптографії. Системи і засоби захисту інформації (СЗІ) отлічаютс від &#8220;звичайних&#8221; систем і коштів тим, що для них не існує простих і однозначних тестів, які дозволяють переконатися в тому, що інформація надійно захищена. Крім того, ефективність СЗІ і просто їх наявність ніяк не связиваютс на працездатності основної системи. Тому завдання ефективності СЗІ НЕ може бути вирішена звичайним тестуванням. Наприклад, для перевірки працездатності системи зв&#8217;язку досить провести її випробування. Однак успішне завершення цих випробувань не дозволяє зробити висновок про те, що вбудована в неї підсистема захисту інформації теж працездатна. Завдання визначення ефективності СЗІ (особливо, якщо використовуються криптографічні методи захисту), найчастіше більш трудомістка, ніж розробка СЗІ, вимагає наявності спеціальних знань і, як правило, більш високої кваліфікації, ніж задача розробки. Часто аналіз нового шифру є новою науковою, а не інженерним завданням. Ці обставини призводять до того, що на ринку з&#8217;являється безліч засобів криптографічного захисту інформації, про які ніхто не може сказати нічого певного. При цьому розробники тримають криптоалгоритм (Як показує практика, часто нестійкий) в секреті. Однак завдання точного визначення даного криптоалгоритму не може бути гарантовано складної хоча б тому, що він відомий розробникам. Крім того, якщо порушник знайшов спосіб подолання захисту, то не в його інтересах про це заявляти. В результаті, користувачі таких СЗІ потрапляють в залежність як мінімум від розробника. Тому суспільству має бути вигідно відкрите обговорення безпеки СЗІ масового застосування, а приховування розробниками криптоалгоритму повинно бути неприпустимим. Кріптосхеми або криптоалгоритмом будемо називати власне алгоритм шифрування, імітозащіти, та інших криптографічних функцій. Криптографічним протоколом будемо називати набір правил і процедур, визначає використання криптоалгоритму. Криптосистема являє собою сукупність кріптосхеми, протоколів і процедур управління ключами, включаючи виготовлення і розповсюдження. Ці визначення не претендують на строгість і не дозволяють провести чітку межу між криптоалгоритмом і протоколом. Так, хеш-функція y = F (z, x) + x, де F &#8211; криптоперетворень з відомим ключем z, може рассматріватьс і як самостійний криптоалгоритм, і як протокол, який використовує перетворення F. Однак для подальшого викладу цих визначень достатньо. Прийнято розрізняти криптоалгоритми за ступенем доказовою їх безпеки. Існують безумовно стійкі, доказовою стійкі і імовірно стійкі криптоалгоритми. Безпека безумовно стійких криптоалгоритмів заснована на доведених теореми про неможливість розкриття ключа. Прикладом безумовно стійкого криптоалгоритму являетс система з разовим використанням ключів (шифр Вернама) або система квантової криптографії, заснована на квантовомеханічної принципі невизначеності. Стійкість доказовою стійких криптоалгоритмів визначається складністю решени добре відомої математичної задачі, яку намагалися вирішити багато математики і яка є загальновизнано складною. Прикладом можуть служити системи Діффі-Хеллмана або Рівестом-Шаміра-Адельмана, засновані на складнощах відповідно дискретного логарифмування і розкладання цілого числа на множники. Імовірно стійкі криптоалгоритми засновані на складності рішення приватної математичної задачі, яка не зводиться до добре відомим завданням і яку намагалися вирішити одне або кілька осіб. Прикладами можуть криптоалгоритми ГОСТ 28147-89, DES, FEAL. На жаль безумовно стійкі криптосистеми незручні на практиці (системи з разовим використанням ключа вимагають великої захищеної пам&#8217;яті для зберігання ключів, системи квантової криптографії вимагають волоконно-оптичних каналів зв&#8217;язку і є дорогими, крім того, доказ їхньої безпеки йде з області математики в область фізики). Перевагою доказовою стійких алгоритмів являетс хороша вивченість задач, покладених в їх основу. Недоліком їх являетс неможливість оперативної доопрацювання криптоалгоритмів у разі появи такої необхідності, тобто жорсткість цих криптоалгоритмів. Підвищення стійкості може бути досягнуто збільшенням розміру математичної задачі або її заміною, що, як правило, тягне ланцюг змін не тільки в шифрованого, а й суміжній апаратурі. Імовірно стійкі криптоалгоритми характерізуютс порівняно малою вивченістю математичної задачі, але зате володіють великою гнучкістю, що дозволяє не відмовлятися від алгоритмів, в яких виявлені слабкі місця, а проводити їх доопрацювання. Завдання забезпечення захищеного зв&#8217;язку включає в себе цілий комплекс проблем. Це завдання забезпечення секретності і імітозащіти, розпізнавання (Аутентифікації) і завдання управління ключами, включаючи їх вироблення, розподіл і доставку користувачам, а також їх оперативну заміну в разі потреби. Загальна схема організації захищеного зв&#8217;язку приведена на малюнку 2.1. Цією ж схемою описується і абонентське шифрування, коли користувач шифрує інформацію, збережену в пам&#8217;яті ЕОМ. В останньому випадку джерело повідомлень і одержувач ототожнюється, а канал зв&#8217;язку може мати довільні затримки. Джерело повідомлень виробляє довільну інформацію (відкриті тексти) з якимось розподілом ймовірностей. Шифратор шифрує це повідомлення на конфіденційному (відомому тільки відправнику і одержувачу) ключі Z і переводить відкритий текст в шифрований текст або шифрограму (Криптограму, шифртекст). Ключі виробляються джерелом ключів і по безпечним каналах розсилаються абонентом мережі зв&#8217;язку. Дешифратор розкриває прийняту шифрограму і передає одержувачу. В схему на малюнку 2.1. включені ще рандомізатор і вирішальне пристрій. Рандомізатор робить все шифрограми несхожими один на одного, навіть якщо вхідні повідомлення однакові. Мета цього буде роз&#8217;яснена нижче. Вирішальне пристрій приймає рішення про те, чи є отримане повідомлення справжнім, тобто виконує функцію імітозащіти. Операції шифрування і розшифрування можна описати так: Y = E (X), X = D (Y). Для взаємної однозначності необхідно, щоб DE було одиничним перетворенням. У цьому розділі буде предполагатьс наявність у відправника і одержувача загального секретного ключа Z. (Насправді ключі у них не обов&#8217;язково однакові, але знання одного ключа, наприклад шифрування, дозволяє легко обчислити інший. Тому розглядаються криптоалгоритми іноді називають симетричними, або одноключевой. Відповідно, і криптографія, що займається вивченням таких алгоритмів, називається одноключевой). Данна схема застосовується в тому випадку, якщо абоненти мережі довіряють один одному. Нижче показано, як за допомогою одноключевой криптографії вирішуються питання імітозащіти і пізнання (таємність обеспечіваетс очевидним чином). Справжність і цілісність повідомлення обеспечіваютс його криптографічним перетворенням, виконуваних за допомогою секретного ключа. Наприклад, якщо відправник передасть одразу і відкритий (не вимагає засекречування), і зашифрований тексти, то це дозволить одержувачу, що знає ключ, стверджувати, що текст при передачі по каналу зв&#8217;язку не був змінений, якщо результат розшифрування шифрограми збігається з відкритим текстом. Дійсно, випадковий збіг відповідних один одному відкритого тексту і шифрограми &#8211; практично неможлива подія. Цю пару міг скласти лише відправник, що знає секретний ключ. Звідси випливає й справжність повідомлення (відправник ототожнюється з власником ключа). В Насправді немає необхідності передавати всю шифрограму, досить передати лише її частина, звану імітовставки, яка повинна залежати від усього відкритого тексту. Тоді одержувач може на підставі отриманого тексту і ключа обчислити свою імітовставки і перевірити її відповідність отриманої. Для впізнання користувача використовується наступний діалог. Перевіряючий виробляє випадковий текст і посилає упізнаваними для шифрування. Упізнаваний шифрує цей текст і повертає перевіряючому. Той перевіряє відповідність шифрограми тексту. Правильна відповідь може скласти тільки власник секретного ключа, який ототожнюється із законним користувачем. Очевидно, що прослуховує діалог порушник не зможе правильно зашифрувати новий текст і назватися користувачем. (Винятком є аналогія відомого шахрайства, застосованого при грі в шахи поштою, коли порушник просто транслює відповіді та запити справжнім перевіряючому і перевіряється, ведучи діалог одночасно з кожним з них). Принципова відмінність даної системи від впізнання за паролем, де підслуховування дозволяє дізнатися секретний пароль і надалі скористатися цим, полягає в тому, що тут по каналу зв&#8217;язку секретна інформація не передається. Ясно, що і якість шифрування, і імітостойкость, і стійкість впізнання можуть бути забезпечені, якщо покладене в основу криптоперетворень є стійким в сенсі розкриття ключа. Криптографічні алгоритми зазвичай будуються з використанням простих і швидко виконуваних операторів декількох типів. Безліч оборотних операторів, що перетворюють текст довжиною n біт в текст довжиною n біт, є елементами групи оборотних операторів по множенню (підстановок n-розрядних слів). Нехай f, g, h &#8211; оборотні оператори, тобто існують f -1, G -1, h -1. Тому hgf &#8211; послідовне виконання операторів f, g, h &#8211; теж оборотний оператор (оператори виконуються справа наліво) з зворотним оператором до цього твору f -1, g -1, h -1. Тому дешифратор виконує ті ж операції, що і шифратори, але в зворотному порядку, і кожен оператор расшифрования є зворотним до відповідному оператору шифрування. Деякі оператори є взаємно зворотними, тобто виконання підряд два рази деякої операції над текстом дає вихідний текст. У термінах теорії груп це записується рівнянням f 2 = e, де e &#8211; одиничний оператор. Такий оператор називається інволюцією. Можна сказати, що інволюція являє собою корінь з одиниці. Прикладом інволюції є додавання по модулю два тексти з ключем. Порушник може вирішувати такі завдання. Він може намагатися розкрити зашифровану інформацію, організувати вибіркове пропускання тієї чи іншої інформації, нарешті, він може намагатися змінити справжню або нав&#8217;язати неправдиву інформацію. Принципова відмінність завдань засекречування та імітозащіти полягає в тому, що ключ засекречування має бути не доступний порушникові протягом строку секретності інформації, який зазвичай набагато більше, ніж термін дії ключа і може складати десятки років. Ключ імітозащіти становить інтерес для порушника тільки під час його дії. Тому й вимоги до нього пред&#8217;являються менш жорсткі, ніж до ключу засекречування. Існує ще одне важливе застосування одноключевой криптографії. Це здійснення обчислюваного в одну сторону перетвореннями інформації. Таке перетворення називається хеш-функцією. Особливість цього перетворення полягає в тому, що пряме перетворення y = h (x) обчислюється легко, а зворотне x = h-1 (y) &#8211; важко. Взагалі кажучи, зворотне перетворення не є функцією, тому правильніше говорити про знаходження одного з прообразів для даного значення хеш-функції. У цьому випадку ключа, розуміється як деяка конфіденційна інформація, немає. Однак стійкі хеш-функції, для яких прообраз за даним значенням функції важко знайти, реалізуються криптографічними методами і вимагають для обгрунтування стійкості проведення криптографічних досліджень. Типове застосування хеш-функції &#8211; створення стисненого образу для вихідного тексту такого, що знайти інший текст, що володіє таким же чином, обчислювально неможливо. Завдання створення стійкої хеш-функції виникає, наприклад, при цифровий підписи текстів. Одне з можливих застосувань самостійних хеш-функцій &#8211; це упізнання користувача за допомогою ланцюжка виду x, h (x), h (h (x)) = h 2 (x), h 3 (x),<br /> &#8230; h k(x). Останнє значення ланцюжка hk (x) є контрольною інформацією для перевіряючого, а користувач знає h k-1 (x) і пред&#8217;являє цю інформацію на вимогу перевіряючого. Перевіряючий обчислює h (h k-1 (x)) і порівнює з контрольною. Наступного разу цей користувач повинен пред&#8217;явити h k-2 (x), а контрольної інформацією є h k-1 (x) і т.д. Це цікаве рішення, запропоноване А. Конхеймом, однак має ряд недоліків. По-перше, користувачеві треба зберігати весь ланцюжок hi (x), що вимагає великого обсягу пам&#8217;яті, якщо число впізнання може бути велике. По-друге, якщо у кожного користувача є кілька перевіряючих, то постає питання про синхронізацію перевіряючих за показниками останнього використаного значення hi (x), тобто потрібно канали зв&#8217;язку між кожною парою перевіряючих. Здатність криптосистеми протистояти атакам (активного чи пасивного) криптоаналітика називається стійкістю. Кількісно стійкість вимірюється як складність найкращого алгоритму, що приводить криптоаналітика до успіху з прийнятною вірогідністю. Залежно від цілей і можливостей криптоаналітика змінюється і стійкість. Розрізняють стійкість ключа (складність розкриття ключа найкращим відомим алгоритмом), стійкість безключового читання, імітостойкость (складність нав&#8217;язування неправдивої інформації найкращим відомим алгоритмом) і ймовірність нав&#8217;язування неправдивої інформації. Це іноді абсолютно різні поняття, не пов&#8217;язані між собою. Деякі криптосистеми, наприклад RSA, дозволяють нав&#8217;язувати хибну інформацію з складністю, практично не залежить від стійкості ключа. Аналогічно можна розрізняти стійкість власне криптоалгоритму, стійкість протоколу, стійкість алгоритму генерації та розповсюдження ключів. Рівень стійкості залежить від можливостей криптоаналітика і від користувача. Так, розрізняють криптоаналіз на основі тільки шифрованого тексту, коли криптоаналітика має в своєму розпорядженні тільки набором шифрограму і не знає відкритих текстів, і криптоаналіз на основі відкритого тексту, коли криптоаналітика знає і відкриття, і відповідні шифровані тексти. Оскільки криптоалгоритм зазвичай повинен бути досить універсальним, природним представляється вимога, щоб стійкість ключа не залежала від Розподіл ймовірностей джерела повідомлень. У загальному випадку джерело повідомлень може виробляти &#8220;зручні&#8221; для порушника повідомлення, які можуть стати йому відомими. В цьому випадку говорять про криптоаналіз на основі спеціально обраних відкритих текстів. Очевидно, що стійкість ключа по відношенню до аналізу на основі вибраних текстів не може перевищувати стійкості по відношенню до аналізу на основі відкритих текстів, а вона, в свою чергу, не може перевищувати стійкості по відношенню до аналізу на основі шифрованих текстів. Іноді розробником СЗІ допускається навіть, що ворожий криптоаналітика може мати доступ до криптосистеми, тобто бути &#8220;своїм&#8221;. Зазвичай криптоалгоритми розробляють так, щоб вони були стійкими по відношенню до криптоаналіз на основі спеціально обраних відкритих текстів. Поняття &#8220;найкращого алгоритму&#8221; розкриття ключа у визначенні стійкості неконструктивно і допускає суб&#8217;єктивне тлумачення (для когось із розробників найкращим алгоритмом може бути простою перебір ключів). Мабуть, ні для одного з використовуваних криптоалгоритмів не визначений найкращий алгоритм розкриття ключа, тобто задача знаходження найкращого алгоритму є надзвичайно складною. Тому на практиці для оцінки стійкості користуються найкращим відомим або знайденим в ході досліджень алгоритмом розкриття. Таким чином, на практиці ніхто не може перешкодити здатному криптоаналітика знизити оцінку стійкості, придумавши новий, більш ефективний метод аналізу. Створення нових ефективних методів розкриття ключа або іншого методу ослаблення криптоалгоритму може давати обізнаним особам великі можливості з нанесення шкоди користувачам, даний криптоалгоритм. Публікація або замовчування цих відомостей определяютс ступенем відкритості суспільства. Рядовий користувач системи безсилий перешкодити порушнику у розкритті його ключів. З викладеного випливає, що поняття &#8220;найкращого відомого&#8221; алгоритму неабсолютно: завтра може з&#8217;явитися новий більш ефективний алгоритм розкриття, який приведе до неприпустимого зниження стійкості криптоалгоритму. З розвитком математики та засобів обчислювальної техніки стійкість криптоалгоритму може тільки зменшуватися. Для зменшення можливого збитку, викликаного несвоєчасною заміною криптоалгоритму, втратив свою стійкість, бажана періодична перевірка стійкості криптоалгоритму. Для зниження ймовірності непередбачуваного &#8220;Обвалу&#8221; знову розробленого криптоалгоритму необхідне проведення криптографічних досліджень. З розглянутого вище випливає, що поняття стійкості криптосистеми багатогранно. Стійкість залежить не тільки від розробника, а й від особливостей використання даного криптоалгоритму в системі управління або зв&#8217;язку, від фізичної реалізації криптоалгоритму, а також від майбутніх успіхів математики та обчислювальної техніки. Адже криптосистема може експлуатіроватьс багато років, а необхідність зберігати в секреті протягом тривалого часу передану раніше по відкритих каналах зв&#8217;язку інформацію може зробити необхідним прогнозувати розвиток науки і техніки на десятиліття. 1.3. Необхідність криптоаналізу. Останні десятиліття характеризується різким збільшенням числа відкритих робіт з усіх питань криптології, а криптоаналіз стає однією з найбільш активно розвиваються областей досліджень. Багато криптосистеми, стійкість яких не викликала особливих сумнівів, виявилися успішно розкритими. При цьому розроблений великий арсенал математичних методів, що представляють прямий інтерес для криптоаналітика. На початку 1970-х рр.. була відома тільки класична одноключевой криптографія, але число відкритих робіт з цієї тематики було вельми скромним. Відсутність інтересу до неї можна пояснити цілим рядом причин. По-перше, гострої потреби в криптосистемах комерційного призначення, мабуть, ще не відчувалося. По-друге, великий обсяг закритих досліджень по криптографії бентежило багатьох учених, яким, природно, хотілося отримати нові результати. І нарешті, може бути, найважливіший фактор полягає в тому, що криптоаналіз як наукова дисципліна фактично як і раніше був великий набір розрізнених &#8220;трюків&#8221;, не об&#8217;єднаних стрункою математичною концепцією. У 1970-х рр.. ситуація радикально змінилася. По-перше, з розвитком мереж зв&#8217;язку і повсюдним вторгненням ЕОМ необхідність у криптографічного захист даних стала усвідомлюватися все більш широкими верствами суспільства. По-друге, винахід Диффи і Хелман криптографії з відкритим ключем створило сприятливий грунт для задоволення комерційних потреб в секретності, усунувши такий істотний недолік класичної криптографії, як складність розповсюдження ключів. По суті, це винахід гальванізувало наукове співтовариство, відкривши якісно нову недосліджену область, яка до того ж обіцяла можливість широкого впровадження нових результатів швидко розвивається теорії обчислювальної Складність для розробки конкретних систем з простим математичним описом. Очікувалося, що стійкість таких систем буде надійно спиратися на нерозв&#8217;язність в реальному часі багатьох добре відомих задач і що, може бути, з часом вдасться довести принципову нераскриваемость деяких криптосистем. Але надії на досягнення доказової стійкості допомогою зведення задач криптографії до добре відомим математичним завданням не виправдалася, а, скоріше, навпаки. Саме та обставина, що будь-яке завдання відшукання способу розкриття деякої конкретної криптосистеми можна переформулювати як привабливу математичну задачу, при вирішенні якої удаетс використовувати багато методів тієї ж теорії складності, теорії чисел і алгебри, призвело до розкриття багатьох криптосистем. На сьогоднішній день класичної стрічки одноразового використання залишається єдиною, безумовно, стійкою системою шифрування. Ідеальне доказ стійкості деякої криптосистеми з відкритим ключем могло б полягати в доказі того факту, що будь-який алгоритм розкриття цієї системи, володіє не пренебрежимо малою ймовірністю її розкриття, пов&#8217;язаний з неприйнятно великим обсягом обчислень. І хоча жодна з відомих систем з відкритим ключем не задовольняє цій сильному критерієм стійкості, ситуацію не слід розглядати як абсолютно безнадійну. Було розроблено багато систем, щодо яких доведено, що їх стійкість еквівалентна складності вирішення деяких важливих задач, які майже всіма розглядаються як вкрай складні, таких, наприклад, як відома задача розкладання цілих чисел. (Багато хто з розкритих криптосистем були отримані в результаті ослаблення цих імовірно стійких систем з метою досягнення більшої швидкодії.) Крім того, результати широких досліджень, що проводилися протягом останніх десяти років як в самій криптографії, так і в загальній теорії обчислювальної складності, дозволяють сучасному криптоаналітика набагато глибше зрозуміти, що ж робить його системи нестійкими. Проведення криптоаналізу для давно існуючих і нещодавно появівшіхс криптоалгоритмів дуже актуально, так як вчасно можна сказати, що даний криптоалгоритм нестійкий, і вдосконалити його або замінити новим. Дл того, щоб виявляти нестійкі криптоалгоритми необхідно весь час удосконалювати вже відомі методи криптоаналізу і знаходити нові. 2. Огляд відомих методів криптоаналізу класичних шифрів. Напрямок криптоаналізу можуть бути різними, відповідно до напрямками криптографії: це розкриття ключа, нав&#8217;язування неправдивої інформації за рахунок знаходження слабкостей в криптоалгоритму або протоколі, можливість нескінченного читання зашифрованою інформації тощо Криптоалгоритм, як правило, повинен бути стійким по відношенню до криптоаналіз на основі вибраних відкритих текстів. Перша вимога по суті означає, що розсекречення певної інформації, передавалася по каналу зв&#8217;язку в зашифрованому вигляді, не повинно призводити до розсекреченню іншої інформації, зашифрованою на цьому ключі. Друге вимога враховує особливості експлуатації апаратури і допускає деякі вільності з боку оператора або осіб, які мають доступ до формуванню засекреченої інформації. Криптоаналіз може базуватися на використанні як загальних математичних результатів (наприклад методів розкладання великих чисел для розкриття криптосистеми RSA), так і приватних результатів, отриманих для конкретного криптоалгоритму. Як правило, алгоритми криптоаналізу являютс імовірнісними. 2.1. Типові методи криптоаналізу класичних алгоритмів 2.1.1. Метод зустрічі посередині. Якщо безліч ключів криптоалгоритму замкнуто щодо композиції, то Тобто для будь-яких ключів zi і zj знайдеться ключ zk такий, що результат шифрування будь-якого тексту послідовно на zi і zj дорівнює шифрограмі цього ж числа на zk, тобто F (zj, F (zi, x)) = F (zk, x), то можна скористатися цією властивістю. Нехай нам потрібно знайти ключ zk. Тоді для знаходження ключа zk, необхідно знайти еквівалентну йому пару ключів zi, zj. Даний метод криптоаналізу заснований на &#8220;парадоксі днів народження&#8221;. Відомо, що якщо вважати, що дні народження розподілені рівномірно, то в групі з 24 осіб з імовірністю 0,5 у двох людей дні народження співпадуть. У загальному вигляді цей парадокс формулюється так: якщо a Ц n предметів вибираються з поверненням з деякої сукупності розміром n, то ймовірність того що два з них співпадуть, дорівнює 1-exp (-a2 / 2). Нехай відомий відкритий текст x і його шифрограма y. Для тексту x будуємо базу даних, яка містить випадкове безліч ключів z | та відповідних шифрограму w = F (z |, x), і упорядковуємо її по шифрограма w. Обсяг бази даних вибираємо О (Ц # {z}). Потім підбираємо випадковим чином ключі z | | для розшифровки текстів y і результат розшифрування v = F (z | |, y) порівнюємо з базою даних. Якщо текст v виявиться рівним однією з шифрограму w, то ключ z | z | | еквівалентний шуканого ключу z. Тимчасова складність методу становить О (Ц # {z} log # {z}). Множник log # {z} враховує складність сортування. Необхідна пам&#8217;ять дорівнює О (Ц # {z} log # {z}) біт або ОЦ # {z}) блоків (передбачається, що довжина блоку і довжина ключа розрізняються на обмежену константу). Цей же метод застосуємо, якщо безліч ключів містить досить велике підмножина, що є полугруппой. Інше застосування цього методу для множини, яка не є полугруппой, можна продемонструвати на хеш-функціях. Наприклад, для підробки підпису треба знайти два тексти, що володіють одним хеш-образом. Після цього можна підписане повідомлення замінити на інше, що має таким же хеш-образом. Пошук двох таких повідомлень можна виконати з використанням методу &#8220;Зустрічі посередині&#8221;. Складність пошуку дорівнює О (Ц # {h}), де # {h} &#8211; число всіляких хеш-образів. Цей алгоритм є імовірнісним. Однак існують і детермінований аналог цього алгоритму &#8220;giant step &#8211; baby step&#8221; з такою ж складністю, запропонований американським математиком Д.Шенксом. 2.1.2. Метод Полларда. Цей імовірнісний метод заснований на наступному факті. Якщо на деякому кінцевому безлічі М визначити випадкове відображення f і застосувати його по черзі до всіх елементів М, а ребрами відповідності &#8211; y = f (x) для x, Yн М. Оскільки безліч М звичайно, то цей граф повинен містити дерева, коріння яких з&#8217;єднані в цикли. Дл випадкового відображення f довжина циклу дорівнює О (Ц # М) і висота дерева в середньому дорівнює О (Ц # М). Для знаходження ключа, наприклад в криптоалгоритму, заснованому на завданні логарифма на деякій групі, досить вирішити задачу про зустріч на графі випадкового відображення. Для цього з двох різних стартових точок x0 |, x0 | | Строятс траєкторія до входу в цикл. Потім одна з двох кінцевих точок, лежать в циклі, фіксується, а траєкторія інший триває до зустрічі з фіксованою крапкою. Для функції f і точки входу x0 довжина траєкторії складає О (Ц # М) кроків. Типовий вид цієї траєкторії містить граничний цикл довжини О (Ц # М) і відрізок до входу в цикл приблизно такий же довжини. В якості індикатора замикання траєкторії Поллард запропонував використовувати рівність xi = x2i, де xi &#8211; i-я точка траєкторії для входу x0. Це рівність буде виконуватися завжди. Значення індексу i НЕ перевищує суми довжини шляху до входу в цикл. В середньому складність знаходження рівності xi = x2i дорівнює 3ц (p / 8) # М. Складність зустрічі, коли обидві точки лежать в циклі, дорівнює 0,5 Ц (p / 8) # М. Таким чином, підсумкова складність дорівнює 6,5 Ц (p / 8) # М. Метод Полларда застосовується для розв&#8217;язання задачі логарифма на циклічної групі, пошуку частково еквівалентних ключів (колізій), для знаходження двох аргументів, що дають однакове значення хеш-функції, і в деяких інших випадках. Стосовно до задачі логарифмування цей метод дозволяє відмовитися від використання великого обсягу пам&#8217;яті в порівнянні з методом зустрічі посередині. Крім того, зникає необхідність сортування бази даних. В результаті тимчасова складність порівняно з методом зустрічі посередині знижується на множник О (log # М). Складність цього методу в даному випадку становить О (Ц # М) кроків і вимагає пам&#8217;яті обсягу О (1) блоків. Проте не завжди требуетс мала пам&#8217;ять. Розглянемо в якості ілюстрації методу Полларда алгоритм знаходження колізії (двох аргументів, що дають однакове значення хеш-функції) для обчислювальної моделі з об&#8217;ємом пам&#8217;яті О (v). Такими аргументами будуть елементи множини М, стрілки від яких під дією хеш-функції f ведуть в точку входу в цикл. Практично алгоритм зводиться до знаходження точки входу в цикл. 1. Увійти в цикл, використовуючи рівність xi = x2i = t. 2. Виміряти довжину циклу m, застосовуючи послідовно відображення f до елементу t до отримання рівності fm (t) = t. 3. Розбити цикл m на v інтервалів однаковою або близькою довжини і створити базу даних, запам&#8217;ятавши і упорядкувавши початкові точки інтервалів. 4. Для стартовою вершини п.1 виконувати поодинокі кроки до зустрічі з небудь точкою з бази даних п.3. Відзначити початкову та кінцеву точки інтервалу, на якому сталася зустріч. 5. Стерти попередню і створити нову базу даних з v точок, розбивши інтервал, на якому відбулася зустріч, на рівні за довжиною частини, запам&#8217;ятавши і відсортувавши початкові точки інтервалів. 6. Повторити процедури пп.4, 5 до тих пір, поки не вийде довжина інтервалу, рівна 1. Обчислити точку зустрічі в циклі, обчислити колізію як пару вершин, одна з яких лежить в циклі, а друга &#8211; ні. Цей алгоритм вимагає багаторазового виконання О (Ц # М) кроків до входу в цикл і виконання сортування бази даних. На кожному етапі при створенні нової бази даних довжина інтервалу скорочується в v разів, тобто кількість повторів одно О (logv # М). Якщо v H +1 визначається ймовірністю непотрапляння на глибину H +1 і шириною графа, р (h | H) = O (H-1h-2). Порівняємо ймовірність pk (h) одержанн глибини h після k кроків при спуску від листа і ймовірність pk (h | Mk-1) глибини h після k кроків при умові, що на кроці k-1 глибина дорівнювала математичного сподівання. Має місце оцінка pk (h) »pk (h | Mk-1). Тому місце ймовірності складного події pk (h) можна розглядати вірогідність простого події pk (h | Mk-1). Нехай стартова вершина лежить на глибині H = O (log # M). Яка буде глибина після чергового кроку? Безпосередні обчислення показують, що математичне сподівання глибини одно H +1 + O (1), тобто другий і подальший кроки збільшують глибину спуску на О (1). Підстановка в як вихідну глибини математичного сподівання глибини спуску на попередньому кроці дає оцінку математичного сподівання глибини спуску після до кроків: h = O (log # M) + O (k). Оскільки оптимальне число кроків при спуску до алгоритму визначається рівністю складності спуску mk і складності сортування m log m, то копт = O (log # M). Звідси випливає, що завдання зустрічі на випадковому орієнтованому дереві не менш складна, ніж задача про зустріч в циклі, то є алгоритм Полларда не покращуємо за рахунок збільшення доступної пам&#8217;яті. 2.1.3. Диференціальний метод криптоаналізу. Диференціальний метод криптоаналізу (ДКА) був запропонований Е.Біхамом і А.Шамиром в 1990 р. Диференціальний криптоаналіз &#8211; це спроба розтину секретного ключа блокових шифрів, які засновані на повторному застосуванні криптографічно слабкою цифровий операції шифрування r разів. При аналізі передбачається, що на кожному циклі використовується свій підключ шифрування. ДКА може використовувати як обрані, так і відомі відкриті тексти. Успіх таких спроб розкриття r-циклічного шифру залежить від існування диференціалів (r-1)-го циклу, які мають велику ймовірність. Диференціал i-го циклу визначається як пара (a, b) i така, що пара різних відкритих текстів x, x * c різницею a може привести до пари вихідних текстів y, y * після i-ого циклу, які мають різницю b (дл відповідного поняття різниці). Ймовірність i-циклового диференціала (A, b) i &#8211; це умовна ймовірність P (D y (i) = b | D x = a) того, що різниця D y (i) пари шіфротекста (y, y *) після i-ого циклу дорівнює b при умови, що пара текстів (x, x *) має різницю D x = a; відкритий текст x і підключи циклів к (1), к (2), &#8230;., к (i) незалежними і рівноймовірно. Основна процедура ДКА r-циклічного шифру з використанням обраних відкритих текстів може бути наступною: 1. На етапі передвичесленням шукаємо безліч (r-1)-циклових диференціалів (a 1, b 1) r-1, (a 2, b 2) r-1, &#8230;. (A s, b s) r-1. Упорядковуємо це безліч диференціалів по величині їх імовірності. 2. Вибираємо відкритий текст x довільним чином і обчислюємо x * так, щоб різниця між x і x * дорівнювала a 1. Тексти x і x * шифрується на дійсному ключі і після r циклів отримуємо пару шифртекста y (r), y * (r). Припускаємо, що на виході передостаннього (R-1)-ого ​​циклу різниця шифртекста дорівнює найбільш вірогідною: D y (r-1) = b 1. Для трійки (D y (r-1), y (r), y * (r)) знаходимо кожне можливе (якщо їх декілька) значення підключа останнього циклу до (r). Додаємо його до кількістю появ кожного такого значення підключа к (r). 3. Повторюємо п.2 до тих пір, поки одне або кілька значень підключа к (r) не стане з&#8217;являтися частіше за інших. Беремо цей підключ або безліч таких подключей в якості криптографічного рішення для підключа к (r). 4. Повторюємо пп.1-3 для передостаннього циклу, при цьому значення y (r-1) обчислюються розшифрування шифртекста на знайденому підключення останнього циклу до (r). Далі діємо аналогічно, поки не будуть розкриті ключі всіх циклів шифрування. Запропонований вперше для аналізу конкретного шифру, ДКА виявився застосовним для аналізу широкого класу марковських шифрів. Марківським називається шифр, у якого рівняння шифрування на одному циклі задовольняє умові: ймовірність диференціала не залежить від вибору відкритих текстів. Тоді, якщо підключи циклів незалежні, то послідовність різниць після кожного циклу утворює марковскую ланцюг, де подальше стан визначається тільки попереднім. Прикладами марковських шифрів являютс DES і FEAL. Можна показати, що марківський r-циклової шифр з незалежними підключили є вразливим для ДКА тоді і тільки тоді, коли для одного циклу шифрування ключ за відомою трійці (y, y *, D x) може бути легко обчислений, і існує (r-1)-циклової диференціал (a, b) к-1 такий, що його ймовірність задовольняє умові P (D y (r-1) = b | D x = a) >> 2-n, де n-кількість біт в блоці шіфруемого тексту. Складність розкриття ключа r-циклічного шифру Q (r) визначається як число використовуваних шифрування з подальшим обчисленням ключа: Q (r) і 2 / (Pmax &#8211;<br /> 1/(2n-1)), де Pmax = max (a) max (b) (P (D y (r-1) = b | D x = a)). Зокрема, якщо Pmax »1 / (2n-1), то атака не буде успішною. Оскільки обчислення підключа &#8211; більш трудомістка операція, ніж шифрування, то одиницею виміру складності є складність знаходження можливих подключей одного циклу по відомим (D y (r-1), y (r), y * (r)). Відмінною рисою диференціального аналізу є те, що він практично не використовує алгебраїчні властивості шифру (лінійність, афінність, транзитивність, замкнутість і т.п.), а заснований лише на нерівномірності розподілу ймовірності диференціалів. 1.4. Лінійний метод криптоаналізу. У відкритій пресі лінійної метод криптоаналізу вперше був запропонований японським математиком Мацуї. Метод передбачає, що криптоаналітика знає відкриті і відповідні зашифровані тексти. Зазвичай при шифруванні використовується додавання по модулю 2 тексту з ключем і операції розсіювання і перемішування. Завдання криптоаналітика &#8211; знайти найкращу лінійну апроксимацію (після всіх циклів шифрування) вираження<br /> xi1+ &#8230;. + xir + yj1 + yjs=zk1 + &#8230;. + zk t (3.1) Нехай pL &#8211; імовірність того, що (3.1) виконується, при цьому необхідно, щоб pL № 1/2 і величина | pL-1/2 | повинна бути максимальна. Якщо | pL-1/2 | досить велика і криптоаналітика відомо достатню кількість пар відкритих і відповідних зашифрованих текстів, то сума по модулю 2 біт ключа на відповідній позиції у правій частині (3.1) дорівнює найбільш ймовірного значенням суми по модулю 2 відповідних біт відкритих і зашифрованих текстів у лівій частині. Якщо pL> 1/2, то сума біт ключа в правій частині (3.1) дорівнює нулю, якщо сума біт в лівій частині дорівнює нулю більше, ніж для половини пар зашифрованих текстів, і сума біт ключа в правій частині (3.1) дорівнює одиниці, якщо сума біт в лівій частині дорівнює одиниці більше, ніж для половини текстів. Якщо 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/sim-pomilok-yaki-potribno-unikati-pri-napisanni-tekstu-dlya-veb/" title="Сім помилок, які потрібно уникати при написанні тексту для Веб">Сім помилок, які потрібно уникати при написанні тексту для Веб</a> (0)</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></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/kriptoalgoritmu/" rel="tag">криптоалгоритму</a>, <a href="http://easy-code.com.ua/tag/kriptoanalitika/" 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/tekstu/" 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/2012/08/metodi-kriptoanalizu-kriptografiya-security-hack-statti/feed/">RSS-стрічка коментарів.</a> <a href="http://easy-code.com.ua/2012/08/metodi-kriptoanalizu-kriptografiya-security-hack-statti/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="9455" /> <input type="hidden" name="redirect_to" value="/2012/08/metodi-kriptoanalizu-kriptografiya-security-hack-statti/" /> </p> <p style="display: none;"><input type="hidden" id="akismet_comment_nonce" name="akismet_comment_nonce" value="662b9ba753" /></p><p style="display: none;"><input type="hidden" id="ak_js" name="ak_js" value="235"/></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-08-19 23:25:04 --> <li><a href="http://easy-code.com.ua/2011/04/avtomatizaciya-biznes-procesiv-svitle-majbutnye-vitchiznyanix-kompanij/">Автоматизація бізнес-процесів &#8211; світле майбутнє вітчизняних компаній (13)</a></li> <li><a href="http://easy-code.com.ua/2011/01/riznovidi-printeriv-zvichajni-ta-nezvichajni-printeri/">Різновиди принтерів. Звичайні та незвичайні принтери (6)</a></li> <li><a href="http://easy-code.com.ua/2010/11/velika-kognitivna-revolyuciya/">Велика когнітивна революція (8)</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, Операційні системи, статті (15)</a></li> <li><a href="http://easy-code.com.ua/2011/01/recenzuvannya-dokumentiv-u-word/">Рецензування документів у Word (10)</a></li> <li><a href="http://easy-code.com.ua/2012/08/suputnikovij-internet-ta-telebachennya-na-noutbuci-za-dopomogoyu-prof-dvb-s-1100-usb-gadzheti-oglyadi/">Супутниковий інтернет та телебачення на ноутбуці за допомогою Prof DVB-S 1100 USB, Гаджети, огляди (14)</a></li> <li><a href="http://easy-code.com.ua/2014/11/pereklad-pdf-dokumentiv-za-dopomogoyu-google-translate/">Переклад PDF-документів за допомогою Google Translate (10)</a></li> <li><a href="http://easy-code.com.ua/2014/07/kalkulyator-teplotexnichnij-rozraxunok/">Калькулятор «Теплотехнічний розрахунок» (19)</a></li> <li><a href="http://easy-code.com.ua/2012/06/formatuvannya-abzaciv-u-word-2010-ms-office-programni-kerivnictva-statti/">Форматування абзаців у Word 2010, MS Office, Програмні керівництва, статті (30)</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, Операційні системи, статті (10)</a></li> <li><a href="http://easy-code.com.ua/2011/02/ustanovka-movnix-paketiv-windows-7-vruchnu/">Установка мовних пакетів Windows 7 вручну (9)</a></li> <li><a href="http://easy-code.com.ua/2011/03/serverni-operacijni-sistemi-providnix-virobnikiv/">Серверні операційні системи провідних виробників (10)</a></li> <li><a href="http://easy-code.com.ua/2011/10/suputnikovij-internet-bez-tarilki-efirne-cifrove-movlennya-za-standartom-dvb-t-gadzheti-oglyadi/">Супутниковий інтернет без тарілки &#8211; ефірне цифрове мовлення за стандартом DVB-T, Гаджети, огляди (8)</a></li> <li><a href="http://easy-code.com.ua/2012/09/uroki-photoshop-yak-pokrashhiti-foto-znyate-na-mobilnik-fotoobroblennya-programi-dlya-roboti-z-grafikoyu-programni-kerivnictva-statti/">Уроки Photoshop: Як покращити фото зняте на мобільник, фотооброблення, Програми для роботи з графікою, Програмні керівництва, статті (9)</a></li> <!-- 2017-08-19 23:25: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.5'></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>