YouTube

Got a YouTube account?

New: enable viewer-created translations and captions on your YouTube channel!

Russian subtitles

← CS387 One Time Pad Russian Subtitles

Quality Russian subtitles for CS387 One Time Pad.

Get Embed Code
3 Languages

Subtitles translated from English Showing Revision 1 created 10/01/2012 by GreatMilenko.

  1. Дадим более точное определение.
  2. Множество сообщений --
  3. строки нулей и единиц, поэтому будем использовать последовательности битов фиксированной длины.
  4. Пусть n -- максимальная возможная длина сообщения.
  5. Мы выбираем сообщение из всех двоичных строк длины n.
  6. Ключ тоже выбирается из двоичных строк длины n.
  7. Для шифрования, для создания шифрующей функции,
  8. мы будем считать сообщение такой последовательностью битов,
  9. и ключ тоже.
  10. Результатом шифрования будет шифротекст,
  11. который является последовательностью битов.
  12. Ее длина -- n, и каждый ее бит --
  13. это XOR соответствующего бита сообщения
  14. и соответствующего бита ключа.
  15. Рассмотрим пример.
  16. И для этого примера я приведу шифротекст,
  17. ключ и сообщение.
  18. Допустим, наше сообщение -- это строка "CS",
  19. но пространство сообщений у нас -- последовательности битов.
  20. Поэтому для начала надо перевести строки в биты.
  21. И в Питоне это делается функцией ord,
  22. которая превращает строку из одного символа
  23. в десятичное число.
  24. Затем надо перевести это десятичное число в биты.
  25. В двоичное число.
  26. И мы повторяем это для каждого символа строки.
  27. Переводим его в число, число -- в биты,
  28. я вам покажу, как это программируется,
  29. а вы напишете код для более интересной части.
  30. Переводим в биты.
  31. Это простой способ, хотя не самый быстрый.
  32. Мы хотим получить массив битов как результат для любого десятичного числа.
  33. Если оно делится на два, помещаем ноль в начале результата.
  34. Если не делится, то единицу.
  35. Потом делим число на два и продолжаем то же самое.
  36. Так мы заполним все позиции битами.
  37. Нам надо, чтобы последовательности битов были определенной длины.
  38. Поэтому будем применять добавление,
  39. и для каждого символа будем использовать семь битов.
  40. Мы будем добавлять к результату ведущие нули,
  41. пока не достигнем нужной длины.
  42. Например, если мы применим ord,
  43. то букве C соответствует число 67.
  44. Если его перевести в биты и добавить нули до длины семь,
  45. то нам этого хватит для 128 разных значений,
  46. чего достаточно для символов в кодировке ASCII,
  47. что мы и получаем от ord.
  48. Можно рассматривать эти биты как список,
  49. и еще удобнее рассматривать их как строку
  50. с помощью процедуры показывания битов, которая выдает строку.
  51. Теперь трансформируем больше одного символа.
  52. Для этого есть процедура перевода строки в биты,
  53. которая обрабатывает все символы строки,
  54. переводя каждый в биты процедурой перевода в биты,
  55. и соединяя результат в одну строку.
  56. Теперь мы умеем переводить строку в биты.
  57. Для нашей строки из двух букв мы получим 14 битов.
  58. Если это было наше сообщение, то мы получили значение М.
  59. Теперь оно и есть наше сообщение.
  60. Имеем 14 битов, n = 14.
  61. Получается, что для шифрования схемой одноразовых блокнотов
  62. нужен ключ, в котором тоже 14 битов.
  63. Давайте выберем ключ,
  64. просто пока что выберем случайный ключ.
  65. Вообще, поиск случайных чисел очень важен в криптографии,
  66. и мы к этому позднее вернемся,
  67. но пока что просто придумаем случайное число.
  68. Допустим, вот наш ключ.
  69. Тогда шифротекст -- просто результат операции XOR
  70. между каждым битом сообщения и соответствующим битом ключа.
  71. Это и есть наш шифротекст.
  72. Теперь такой вопрос. Вы перехватили
  73. только этот шифротекст, ничего не знаете
  74. о сообщении или ключе, и хотите угадать
  75. возможные значения ключа, чтобы прочитать сообщение.
  76. Для какого именно значения ключа
  77. вы бы ошибочно решили, что сообщение
  78. было на самом деле "BS", а не "CS"?