У цьому сегменті я хочу дати кілька прикладів потокив шифрів, які використовуються на практиці. Я збираюся почати з двох старих прикладів, які насправді не повиненні використовуватися в нових системах. Але тим не менше, вони як і раніше досить широко використовується і тому я просто хочу, щоб згадати імена, так щоб ви були знайомі з з цими поняттями. Перший потоковий шифр, про який я хочу поговорити, називається RC4, розроблений ще в 1987 році. І я тільки збираюся дати вам його опис високого-рівня, а потім ми будемо говорити про деякі недоліки RC4 і залишимо його. Так RC4 з перемінним розміром насіння, тут я просто навів приклад, де він буде приймати 128 біт як розмір зерна, який потім будуть використовуватися в якості ключа для потокового шифру. Перше, що він робить, він розширює 128-бітний секретний ключ до 2048 біт, який буде використовуватися як внутрішній стан для генератора. А потім, після того, як це зробить це розширення, він в основному виконує дуже простий цикл, де кожна ітерація цього циклу виводить один байт вихідних. Так, по суті, ви можете запустити генератор так довго, як ви хочете, і створити один байт в той час. Тепер RC4, насправді, як я сказав, досить популярний. Він використовується в протоколі HTTPS, і досить часто. У ці дні, наприклад, Google використовує RC4 в своєму HTTPS. Він також використовується у WEP як ми обговорювалися в останньому сегменті, але, звичайно, у WEP, воно неправильно і це повністю небезпечно, так, як воно всередині WEP. Так, протягом багатьох років, деякі недоліки були знайдені в RC4, і як наслідок, рекомендується, щоб нові проекти фактично не використовували RC4, а використовувати більш сучасні псевдо-генератор випадкових чисел, як ми будемо обговорити в кінці відрізка. Отже, дозвольте мені просто згадати два недоліки. Таким чином, перший з них, це свого роду дивні принципі, якщо ви подивитеся на другий байт виходу RC4. Виявляється, другий байт трохи упереджено. Якщо RC4 був зовсім випадковим, ймовірність того, що другий байт буває рівним нулю б рівно через 256. Є 256 можливих байтів, ймовірність того, що це нуль повинна бути одна на 256. Буває так, що для RC4 ймовірності насправді два більше 256, що означає, що якщо ви використовуєте вихід RC4 для шифрування повідомлення, другий байт, швидше за все, не будуть зашифровані взагалі. Іншими словами, це буде XOR з нулем в два рази ймовірність того, що він повинен. Так, дві за 256, замість одного за 256. І до речі, я повинен сказати, що немає нічого особливого в другому байті. Виявляється перший і третій байт також упереджений. І справді тепер рекомендується, якщо ви збираєтеся використовувати RC4, що ви повинні зробити, це ігнорувати основному перші 256 байт вихідний і просто почати використовувати вихід генератора, починаючи від 257 байта. Перша пара байтів, виявляється упередженною, тому ви просто ігноруєте їх. Друга атака що була виявлена, що насправді, якщо ви подивитеся на дуже довге виведення з RC4 так буває що ви швидше за все, отримаєте послідовність 00. Іншими словами, ви швидше за все, отримаєте шістнадцять біт, два байти нуль, нуль, більше ніж потрібно. Знову ж таки якщо RC4 був цілком випадковий, ймовірність побачити нуль, нуль буде точно 1/256 в квадраті. Виявляється RC4 є трохи упередженим та зсуву складає 1/256 у кубі. Його виявляється, це упередження фактично починається після того, як кілька гігабайт даних що виробляються RC4. Але тим не менш, це щось, що може використовувати для прогнозування генератора і безумовно ним можна відрізнити вихід генератора з дійсно випадковою послідовностю. Основне те, що нуль, нуль частіше з'являється чим потрібно є у distinguisher. А потім в останньому сегменті ми говорили про пов'язані з ключем атаки, які були використані для нападу на WEP, які в основному говорять, що якщо один використовує ключі, які тісно пов'язані один з одним тоді це дійсно можливо щоб відновити кореневий ключ. Так що ці недоліки, які, як відомо, RC4 і як на результат, рекомендується в нових систем фактично не використовувати RC4 і замість цього використовувати сучасні генератори псевдовипадкових. Гаразд, другий приклад, я хочу дати вам зламаний потоковий шифр, який використовується для шифрування DVD фільмів.Коли ви купуєте DVD у магазині, фактично фільм шифрується за допомогою потокового шифру під назвою на система шифрування змісту, CSS. CSS виявляється зламанним потоковим шифром, і ми дуже легко можна взламати його, і я хочу, показати вам, як атакуючий алгоритм працює. Ми робимо це, так що ви можете бачити приклад алгоритма атаки, але насправді, є багато систем, що в основному використовують цю атаку для розшифровки зашифрованих дисків DVD. Так що CSS потоковий шифр заснований на те, що апаратні дизайнери люблять. Він призначений до шифрованного потоку обладнання, яке повинна бути легко здійсненним в устаткуванні і на основі механізму під назвою в лінійний зворотній зв'язок змінити реєстр. Так нелінійним зворотним зв'язком зсувний регістр в основному зареєструвати що складається з клітинок, де кожна клітинка містить один біт. Тоді в основному що відбувається, є ці крани в певних клітинок, не всі клітинки, певні позиції називаються крани. І тоді ці крани каналу в на XOR а потім в Кожен цикл, зрушення зареєструвати зрушення вліво. Останній шматок падає і перший біт, то стає результатом цього XOR. Так що ви можете бачити, що Це дуже простий механізм реалізації і в обладнанні займає дуже мало транзисторів. Просто зрушення прямо, останній біт падає з і перший біт тільки стає XOR попередніх бітів. Так що насіння для цього LFSR в основному, це початковий стан на LFSR. І це в основі ряд потік шифрів. Нижче наведено кілька прикладів. Так, як Я сказав, DVD шифрування використовує два LFSRs. Я покажу вам, як це працює просто на друге. GSM шифрування, вони алгоритмів, що називається A51 і A52. І що три LFSRs. Bluetooth використовує шифрування — алгоритм під назвою Електронна нуля. Вони всі потік шифри, і що використання чотирьох LFSRs. виявляється всі ці порушуються погано, і дійсно, дійсно не слід довіряти для шифрування трафіку, але вони всі реалізовані в апаратного забезпечення, так що це трохи складно зараз, змінити яке обладнання робить. Але найпростіший з них, CSS, насправді має милий напасти на нього, так що хай мені показати вам, як працює атака. Отже, давайте описати, як CSS насправді працює. Так, ключ для CSS п'ять байт, а саме 40 біт, п'ять разів восьмий – 40 біт. На причина, вони хочуть обмежити себе до лише 40 біт є був DVD шифрування розроблений в той час, де експортувати США правил дозволено лише для експорту crpyto алгоритми, де ключ був лише 40 біт. Таким чином були дизайнерів CSS вже обмежена до дуже, дуже короткий ключів. Просто 40 біт ключі. Отже, їх дизайн працює наступним чином. В основному, CSS використовує два LFSR. Один, LFSR 17-біт. Іншими словами, Реєстр містить 17 біти. А інші є 25-розрядні LFSR, Це трохи більше часу, 25-розрядні LFSR. І як ці LFSRs seeded виглядає наступним чином. Так ключ для шифрування, в основному виглядає наступним чином. Ви починаєте з один, і використовується для його перші два байти ключ. І це початковий стан на LFSR. А потім другий LFSR в основному intitialized так само. Один об'єднані останніх трьох байт ключ. Ось завантажені в початковий стан на LFSR. Ви можете побачити, що перші два байти шістнадцять біти, плюс провідних один, що сімнадцять біти в цілому, у той час як другий LFSR є 24 біта, плюс один, який є 25 біти. І ви помітите, що ми використовували всі п'ять біти ключ. Так, то ці LFSRs в основному балотуватися на вісім циклів, так що вони генерувати 8 біт виводу. І тоді вони пройти через цей суматора, яка в основному робить Додавання за модулем 256. Так, так що це вікні Додавання за модулем 256. Є ще один Технічні речі, що відбувається. Справді, давайте фактично — також додав є нести від на попередній блоку. Але це не так важливо. Це докладно, що не так відповідні. Гаразд, так що кожен блок, ви помітите, що ми робимо додавання за модулем 256 і Ми ігнорування на нести, але до виконання в основному додається як нуль або один до на Додавання наступний блок. Добре? І потім, в основному це вихід один байт на раунд. Гаразд, і то цей байт, то звичайно використовується, XOR-Ед з підходящим байт фільм, який під час шифрування. Добре, так що це дуже простий потік шифр, вона займає дуже мало устаткування для реалізації. Вона буде працювати швидко, навіть на дуже Дешеві устаткування і вона буде шифрувати фільми. Так виходить, що це дуже просто розірвати у час приблизно двох до в сімнадцять років. Тепер, дозвольте мені показати вам, як. Тому припустимо, що ви перехоплювати фільми, так що тут ми є зашифровані фільму, які потрібно розшифрувати. Так що давайте говорити, що це всі зашифровані так вас не знаю, що там всередині тут. Однак, так буває, що тільки тому, що DVD шифрування використовує файли MPEG, так буває, якщо ви знаєте про префікс у звичайний текст, давайте просто сказати, може бути це двадцять байт. Ну, ми знаємо, що якщо ви XOR ці дві речі разом, так само в інших словах, ви робите XOR тут, те, що ви отримаєте це початковий сегмент на PRG. Таким чином, ви отримаєте на перші двадцять байт вихідний CSS, вихід цього PRG. Гаразд, так що тепер Ось що ми будемо робити. Так, у нас є перші двадцять байт виводу. Зараз Ми виконайте такі дії. Ми спробуємо всі двох до сімнадцять можливі значення першого LFSR. Добре? Таким чином, два сімнадцять можливих значень. Так що для кожного значення, так і для кожен з цих двох до сімнадцять початкові значення у LFSR, ми збираємося працювати на LFSR для двадцяти байт, добре? Так що ми будемо генерувати двадцять байт виходи з цієї Перший LFSR, припускаючи, — для кожної з двох сімнадцять можливі параметри. Тепер пам'ятаю, ми маємо повний вихідний CSS системи. Так що ми можемо зробити це ми можна прийняти цей висновок, який ми маємо. Вилучення його з двадцяти укусів і що ми отримав від першого LFSR і якщо насправді наші припущення для початкового стану перший LFSR є правильним, що ми повинні отримати є перші двадцять байтове вихід на Другий LFSR. Право? Тому що, за визначенням, що вихід з CSS система є. Тепер виявляється що дивлячись на 20-байтове послідовність, це дуже легко щоб сказати, чи Ця послідовність 20-байтове прийшли з 25-розрядні LFSR, чи ні. Якщо це не, то ми знаємо, що наші припущення за 17-розрядні LFSR неправильні і потім ми перейдемо до наступного вгадати для LFSR 17-біт і наступний думаю, і так далі і так далі. Поки врешті-решт ми потрапили права початковий держави за 17-трохи LFSR і тоді ми будемо реально отримати, ми побачимо, що 20 байтів, що ми отримуємо, як кандидат вихід для 25-розрядні LFSR справді можливий вихід для 25-розрядні LFSR. І потім, не тільки буде ми повинні дізнався правильну початковий стан для LFSR 17-біт, ми повинні також дізнався правильну початкового стану 25-розрядні LFSR. І тоді ми можемо передбачити, що залишаючись виходи, CSS і, звичайно, використовуючи, що, ми можемо дешифрувати залишок фільм. Ми насправді можна відновити залишилися звичайний текст. Добре. Це те, що ми говорили раніше. Так, я сказав це трохи швидко, але, сподіваюся, було ясно. Ми також будемо робити домашнє завдання здійснювати на цей тип потоку шифри і ви родом з отримаєте точку як ці атаки алгоритмів роботи. І я повинен згадати, що є багато відкритих вихідних систем тепер, що насправді використовувати цей метод, щоб дешифрувати дані, зашифровані CSS. Гаразд, так що тепер, що ми вже бачили два слабкі прикладів, давайте перейдемо до найкращих прикладів і зокрема тим краще псевдовипадкових генератори приходять від те, що називається eStream проекту. Це є проект, що уклали в 2008 році, і вони право в основному п'ять різних потоку шифри, але тут я хочу представити тільки один. Тому перше всіх параметрів для Ці шифри потоку є трохи інакше, ніж те, що ми звикли. Так, ці потік шифрів, як звичайно, вони мають насіння. Але крім цього них, що і в званих даний час і ми побачимо, що даний час використовується для в хвилину. Так вони приймають два входи, насіння і в даний час. Ми побачимо, що в даний час використовується для за секунду. І звичайно, вони виробляють дуже великі виводу, так n, ось набагато, набагато, набагато більше, ніж s. Тепер, коли я кажу nonce, що я маю на увазі — це значення, що з ніколи не повторити тих пір, як ключ виправлена. І я поясню, що в більш докладно в за секунду. Але зараз, просто думаю, що це як унікальну значення, ніколи не повторення тих пір, як ключ це те ж саме. І тому, звичайно, якщо у вас є цей PRG Ви б зашифрувати, ви отримаєте шифр потоку як і раніше, за винятком зараз як бачите, на PRG приймає як введення ключа і в даний час. І є власність в даний час що пара, k r кома, так ключових кома nonce, що ніколи не — ніколи не повторюється. Він має ніколи не використовуються більше одного разу. Так суть в тому, що можна повторно використовувати ключ, повторне використання ключ, тому що в даний час робить пара унікальний, тому що k і r, лише використовується один раз. Я скажу, що вони унікальні. Добре, так що ця nonce роду милий трюк що рятує нас біда з переїзд в новий ключ кожного разу. Гаразд, так що зокрема приклад з eStream, що я хочу, щоб показати вам, називається сальса двадцять. Це є потік шифр, який призначений для реалізації програмного забезпечення та устаткування реалізацій. Це навіть цікавий. Ви розумієте, що деякі потік шифри розроблений для програмного забезпечення, як RC4. Все це робить покликана зробити Програмна реалізація працювати швидко, в той час як інші потік шифри призначені для устаткування, як CSS, за допомогою LFSR, які особливо покликаний зробити устаткування реалізацій дуже дешево. Крім того, гарна річ про це є те, що Таким чином, що це, як легко реалізувати його в апаратне та програмне забезпечення Реалізація є також дуже швидко. Отже, дозвольте мені пояснити, як працює сальса. Ну, сальса приймає або 128 або 256 біт ключі. Тільки я поясню 128-бітна версія сальси. Так що це насіння. А потім вона також вимагає даний час, як перед, яка трапляється бути 64 біт. І тоді він буде генерувати великі виводу. Тепер як це робить дійсно працюють? Ну, сама функція визначається наступним чином. В основному, враховуючи ключ і в даний час, він буде генерувати дуже довго, Ну, давно псевдовипадкових послідовність, так довго, як це необхідно. І це зроблю це за допомогою цієї функції, які я будете позначимо H. це функція h бере три входи. В основному ключ. Ну, насіння k nonce r а потім лічильник, який збільшує від кроку до кроку. Так само... від нуля до один, два, три, чотири як тривалих як [нечутний] ми, щоб бути. Добре? Тому в основному, на оцінці цього h на цьому k r, але з використанням цього incrementing лічильник, ми можемо отримати на послідовності, що це так довго, як ми хочемо. Так що все, що потрібно зробити, це описати як ця функція H працює. Тепер дозвольте мені зробити це тут для вас. Як це працює, виглядає наступним чином. Ну, ми Почніть шляхом розширення Штатів в щось досить великий, який є 64 байт Це давно і ми зробити наступним чином. В основному ми будемо дотримуватися константа на початку, так Існує Тао нуль, ці чотири байт, це чотири байт константа, так специфікації для Сальса в основному надає значення для Тао нуль. Потім ми покласти k, у яких є шістнадцять байт. Потім ми покласти іншу константа. Знову ж таки це чотири байт. І як я вже сказав, специфікації в основному призначення те, що Ця фіксована константа. Потім ми покласти в даний час, який є 8 байт. Потім ми ставимо індексу. Це лічильник нуль, один, два, три, чотири, яка є ще вісім байт. Потім ми покласти іншу константа Тау два, яка є ще чотирьох байтів. Потім ми покласти ключ знову, це ще одна шістнадцять байт. І потім, нарешті ми третій постійною, Тау три, яка є інший чотирьох байтів. Добре, так як я вже сказав, якщо ви підсумувати дані, ви бачите, що ви отримаєте 64 байт. Тому в основному ми розширювались ключ і в даний час і лічильник на 64 байт. В основному ключ повторюється двічі я думаю. І тоді ми робимо ми застосовувати на функція, я буду називати h цей функціональний мало. добре, так що ми застосувати цю функцію, мало h. І це функція, що один до одного, так що це співставляє 64 байт 64 байт. Це є повністю оборотна функції, добре? Тому ця функція h, як я вже сказав, це є invertable функції. Так дано вводу можна отримати на виході і з огляду на Ви можете повернутися до вводу виводу. І призначений спеціально тому вона має на - легко для реалізації в устаткування і b-x-86, це дуже легко реалізувати, тому що x86 має цей SSE2 інструкція встановити, який підтримує всі операції потрібно робити для цієї функції. Це дуже, дуже швидко. В результаті, сальса має дуже швидкий потік шифр. І тоді він робить це в основному знову і знову. Так що це відноситься це Функція h знову і він отримує інший 64 байт. І так далі і тому подібне, в основному він робить це в десять разів. Добре, так що все це тут, сказати повторюється в десять разів, так в основному застосовуються h десять разів. А то сам по собі, це насправді не досить випадковий. Це не буде дивитися випадкові, тому що, як ми вже казали, H є повністю invertable. Так, зважаючи Цей кінцевого виводу, це дуже легко, просто Інвертувати h і потім повернутися до оригіналу входи і потім тест, що введення має право структури. Так робити ще одна річ, яка є в основному XOR, входи і виходи остаточний. Фактично, Вибач. Це не є XOR. Це насправді доповненням. Так ви зробити доповнення-слово слово. Так що якщо 64 байт, ви робите слово за словом доповнення чотирьох байтів в на час і, нарешті, ви отримаєте 64-байтове виводу, і все. Це весь генератор псевдовипадкових. Так що, що є функції, мало h. І, як я пояснили, це цілий будівництво тут є функція великих h. І тоді вам оцінити Великий h на збільшує лічильник я з нуля, один, два, три року. І що дасть вам псевдовипадкових послідовності, що це так довго, як це буде потрібно. І в основному, це не signifigant зазнає нападу на це. Це має безпеки що з дуже близько двох до 128. Ми побачимо, що це означає, що більше саме пізніше на. Це дуже швидкий потік шифр, як апаратного і програмного забезпечення. І, наскільки Ми можемо сказати, що це, як видається, непередбачуваний, як це потрібно для потоку шифр. Так я треба сказати, проект eStream насправді має п'ять потік шифри як це. Я тільки вибрав сальса, тому що я думаю, це самий елегантний. Але я можу дати вам деякі продуктивність номери тут. Так що ви можете бачити, це продуктивність чисел на на 2.2 Гігагерц, ви знаєте, x86 типа. І ви можете бачити, що RC4 фактично на повільний. Тому, що по суті, Ну це не дійсно скористатися на устаткування. Він тільки робить байтів операцій. І так багато даремно циклів, не використовується. Але E-потік кандидатів, сальса та інші кандидат називається Sosemanuk. Я повинен сказати, що це eStream фіналістів. Ці власне потік шифрів, які затверджені eStream проекту. Ви можете бачити, що вони досягли значних ставки. Це 643 мегабайт за секунду на цьому Архітектура, більш ніж достатньо для фільму і ці насправді просто вражало ставки. І тепер ви бачили приклади двох старі шифрів потоку, що не повинно бути використовуються, включаючи нападів на ці потік шифрів. Ви бачили, сучасний ефір шифри схожі з цього nonce. І ви побачите цифри продуктивності для цих сучасний ефір шифрів, так що якщо вам трапиться потрібен шифр потоку ви могли б використовувати один з eStream фіналістів. Зокрема, ви могли б використовувати щось подібне до сальси.