
Russian: 
Дадим более точное определение.
Множество сообщений --
строки нулей и единиц, поэтому будем использовать последовательности битов фиксированной длины.
Пусть n -- максимальная возможная длина сообщения.
Мы выбираем сообщение из всех двоичных строк длины n.
Ключ тоже выбирается из двоичных строк длины n.
Для шифрования, для создания шифрующей функции,
мы будем считать сообщение такой последовательностью битов,
и ключ тоже.
Результатом шифрования будет шифротекст,
который является последовательностью битов.
Ее длина -- n, и каждый ее бит --
это XOR соответствующего бита сообщения
и соответствующего бита ключа.
Рассмотрим пример.
И для этого примера я приведу шифротекст,
ключ и сообщение.
Допустим, наше сообщение -- это строка "CS",
но пространство сообщений у нас -- последовательности битов.

English: 
So let's define that a little more precisely.
So we're going to find our set of messages--
is strings of 0s and 1s--so we'll use bits and some fixed length.
So n is number that gives us the maximum length of a message.
Our message is selected from all binary strings of length n.
Our key is also selected from the set of all binary strings of length n.
And then to do encryption--our encryption function--
we're going to think of the message as being this sequence of bits
and the key is also a sequence of bits.
The result of our encryption is the ciphertext,
which is a sequence of bits.
So, length n, where the value of each ciphertext bit
is equal to the XOR of the corresponding message bit
and the corresponding key bit.
So let's try an example.
And for this example, I'm going to give you the ciphertext
and the key and the message.
So suppose our message is the string 'CS,'
but our message space is in bits.

German: 
Lasst uns das etwas genauer definieren.
Wir definieren, dass unsere Nachrichtenmenge
Zeichenketten aus 0 und 1 sind, daher verwenden wir Bits, und von einer festen Länge.
n ist die Zahl, die die maximale Länge einer Nachricht gibt.
Unsere Nachricht wird ausgewählt aus allen binären Zeichenketten der Länge n.
Unser Schlüssel wird ebenfalls aus der Menge aller binären Zeichenketten der Länge n gewählt.
Um dann zu verschlüsseln -- unsere Verschlüsselungsfunktion
-- wir denken uns unsere Nachricht als diese Bitfolge
und der Schlüssel ist auch eine Bitfolge.
Das Ergebnis der Verschlüsselung ist der Geheimtext,
der ist eine Bitfolge,
auch der Länge n, wo jedes Bit des Geheimtextes
gleich dem entsprechenden Nachrichten-Bit XOR
dem entsprechenden Schlüssel-Bit ist.
Versuchen wir ein Beispiel.
Für dieses Beispiel gebe ich euch den Geheimtext
und den Schlüssel und die Nachricht.
Angenommen, unsere Nachricht ist die Zeichenkette 'CS',
aber unser Nachrichtenraum ist in Bits.

German: 
Als erstes müssen wir diese Zeichenketten in Bits konvertieren,
das können wir in Python mit ord machen,
das nimmt einen String der Länge 1 und verwandelt ihn in
eine Dezimalzahl.
Dann müssen wir diese Dezimalzahl in Bits umwandeln,
in eine Binärzahl.
Und das müssen wir mit jedem Buchstaben des Strings tun.
Wir konvertieren ihn in ein Zeichen und konvertieren das in Bits,
ich zeige Euch den Code dafür.
Den interessanteren Code zu schreiben überlassen wir euch.
Hier konvertieren wir in Bits.
Das ist ziemlich geradlinig, aber nicht der kürzeste Weg.
Wir machen ein Bitarray als Ergebnis für jede Dezimalzahl,
wenn sie durch 2 teilbar ist, kommt eine 0 an den Anfang des Ergebnisses,
wenn sie nicht durch 2 teilbar ist, wird es eine 1.
Und dann teilen wir die Zahl durch 2, wenn wir fortschreiten.
Das füllt alle Stellen.
Wir wollen dass unsere Bits eine bestimmte Länge haben,
drum haben wir ein Padding,
und für alle Buchstaben verwenden wir 7 Bits.

English: 
Well, the first thing we need to do is to convert those strings to bits
and we can do that in Python by using ord,
that takes a one character string and turns it into
a decimal number.
And then we need to convert that decimal number into bits.
Into a binary number.
And we need to do this for each character in the string.
We're going to convert it to a character, convert that to bits,
and I'll show you the code for doing that,
we'll leave the more interesting code for you to write.
Here we're converting to bits.
This is a fairly straightforward, but not the shortest way to do this.
We're going to make an array of bits as our result for any decimal number
if it's divisible by 2, we want to have a 0 at the beginning of a result.
If it's not divisible by 2, that's going to be a 1.
And then we divide the number by 2 as we go forward.
So that's going to fill up all the places.
We want our bits to be particular lengths,
so we have a padding,
and for all the characters, we'll use 7 bits.

Russian: 
Поэтому для начала надо перевести строки в биты.
И в Питоне это делается функцией ord,
которая превращает строку из одного символа
в десятичное число.
Затем надо перевести это десятичное число в биты.
В двоичное число.
И мы повторяем это для каждого символа строки.
Переводим его в число, число -- в биты,
я вам покажу, как это программируется,
а вы напишете код для более интересной части.
Переводим в биты.
Это простой способ, хотя не самый быстрый.
Мы хотим получить массив битов как результат для любого десятичного числа.
Если оно делится на два, помещаем ноль в начале результата.
Если не делится, то единицу.
Потом делим число на два и продолжаем то же самое.
Так мы заполним все позиции битами.
Нам надо, чтобы последовательности битов были определенной длины.
Поэтому будем применять добавление,
и для каждого символа будем использовать семь битов.

Russian: 
Мы будем добавлять к результату ведущие нули,
пока не достигнем нужной длины.
Например, если мы применим ord,
то букве C соответствует число 67.
Если его перевести в биты и добавить нули до длины семь,
то нам этого хватит для 128 разных значений,
чего достаточно для символов в кодировке ASCII,
что мы и получаем от ord.
Можно рассматривать эти биты как список,
и еще удобнее рассматривать их как строку
с помощью процедуры показывания битов, которая выдает строку.
Теперь трансформируем больше одного символа.
Для этого есть процедура перевода строки в биты,
которая обрабатывает все символы строки,
переводя каждый в биты процедурой перевода в биты,
и соединяя результат в одну строку.
Теперь мы умеем переводить строку в биты.
Для нашей строки из двух букв мы получим 14 битов.
Если это было наше сообщение, то мы получили значение М.
Теперь оно и есть наше сообщение.
Имеем 14 битов, n = 14.

German: 
Wir füllen das Ergebnis mit führenden Nullen auf,
bis wir diese Größe erreicht haben.
Wir können das sehen, wenn wir ord aufrufen, dann sehen wir,
dass die Zahl zu dem Buchstaben C 67 ist.
Wenn wir das zu Bits konvertieren, und 7 als Padding verwenden,
dann reicht das für 128 verschiedene Werte,
das ist genug für die Werte der ASCII-Zeichen,
die wir von ord erhalten.
Wir können diese Bits als Liste ansehen,
und wir können sie ein bisschen einfacher als String betrachten,
wenn wir die display_bits-Prozedur verwenden, die das gerade in einen String verwandelt hat.
Nun möchten wir mehr als ein Zeichen konvertieren.
Dafür haben wir eine stringtobits-Prozedur,
die alle Zeichen des Strings durchläuft,
jedes mittels converttobits in Bits umwandelt,
und alle zum Ergebnis konkateniert.
Nun können wir stringtobits
auf unseren 2-Buchstaben-String anwenden und erhalten14 Bits als Ergebnis.
Wenn das unsere Nachricht ist, dann ist der Wert von m, das, was wir hier haben.
Das ist unsere Nachricht.
Da sind 14 Bits, n ist 14.

English: 
So we're going to pad the result with leading zeros
until we get to that size.
We can see this--so if we do ord we see that
the number corresponding to the letter C is 67.
If we convert that to bits--and we'll use 7 as our padding--
that gives us enough for 128 different values
which is enough for the ASCII character values
that we get back from ord.
We can see those bits as a list,
and we can see that a little more easily as a string
using the display bits procedure that just turned that into a string.
So now we want to convert more than one character.
To do that, we have a string to bits procedure
that goes through all the characters in the string,
converting each one to bits using convert to bits,
and concatenating those all together to the result.
So now we can do string to bits.
For our two-letter string, and now we get 14 bits as a result.
So if that's our message, then the value of M is what we got there.
So this is our message.
There are 14 bits, n is 14.

German: 
Das heißt, um das mit einem One-Time Pad zu verschlüsseln,
brauchen wir einen Schlüssel, der auch 14 Bits hat.
Last uns unseren Schlüssel wählen.
Wir denken uns jetzt einfach einen zufälligen Schlüssel aus.
Zufällige Werte zu finden ist tatsächlich sehr wichtig in der Kryptographie,
und darüber reden wir in einer späteren Unit.
Jetzt lasst uns einfach einen erfinden.
So, wenn das unser Schlüssel ist,
dann ist der Geheimtext gerade das Ergebnis von XOR
von jedem Bit der Nachricht mit dem zugehörigen Bit des Schlüssels.
Das ist unser Geheimtext.
Die Frage ist: als Lauscher
habt ihr nur diesen Geheimtext gesehen, ihr wisst nichts
über die Nachricht oder den Schlüssel, und ihr ratet
mögliche Werte für den Schlüssel, um herauszukriegen, was die Nachricht ist.
Welcher Wert für den Schlüssel
würde euch zu der falschen Annahme verleiten, dass die Nachricht

Russian: 
Получается, что для шифрования схемой одноразовых блокнотов
нужен ключ, в котором тоже 14 битов.
Давайте выберем ключ,
просто пока что выберем случайный ключ.
Вообще, поиск случайных чисел очень важен в криптографии,
и мы к этому позднее вернемся,
но пока что просто придумаем случайное число.
Допустим, вот наш ключ.
Тогда шифротекст -- просто результат операции XOR
между каждым битом сообщения и соответствующим битом ключа.
Это и есть наш шифротекст.
Теперь такой вопрос. Вы перехватили
только этот шифротекст, ничего не знаете
о сообщении или ключе, и хотите угадать
возможные значения ключа, чтобы прочитать сообщение.
Для какого именно значения ключа
вы бы ошибочно решили, что сообщение

English: 
That means--to encrypt this using a One-Time Pad,
we need a key that also has 14 bits.
So let's pick our key,
and--we're just going to make up a random key now.
Actually finding random values is very important in cryptography,
and we'll talk about that in a later unit,
but for now let's just make one up.
So suppose this is our key.
Then the ciphertext is just the result of XOR
in each message bit with the corresponding key bit.
So that's our ciphertext.
So the question is, as an interceptor,
you saw just this ciphertext, you don't know anything
about the message or the key, and you're going to guess
possible key values to try to figure out what the message is.
And what key value would you guess
that would mislead you to think that the message

English: 
was actually BS instead of CS?

German: 
eigentlich BS war, statt CS?

Russian: 
было на самом деле "BS", а не "CS"?
