Keystream là gì?

Noun Security

Trong mật mã, keystream là một luồng các ký tự ngẫu nhiên (random) hoặc giả ngẫu nhiên (pseudorandom) được kết hợp với một thông điệp bản rõ (plaintext message) để tạo ra một thông điệp được mã hóa (bản mã (ciphertext)). Các "ký tự" trong keystream có thể là bit, byte, số hoặc các ký tự thực như A-Z tùy thuộc vào trường hợp sử dụng. Thông thường mỗi ký tự trong keystream hoặc được thêm, trừ hoặc XOR với một ký tự trong bản rõ (plaintext) để tạo ra bản mã, sử dụng số học mô-đun (modular arithmetic). Keystream được sử dụng trong one-time pad và trong hầu hết các stream cipher. Mật mã khối (block cipher) cũng có thể được sử dụng để tạo keystream. Ví dụ: chế độ CTR là một chế độ khối (block mode) làm cho một mật mã khối tạo ra một keystream và do đó biến mật mã khối thành một stream cipher.

Trong ví dụ đơn giản này, chúng ta sử dụng bảng chữ cái tiếng Anh gồm 26 ký tự từ a-z. Vì vậy, chúng ta không thể mã hóa số, dấu phẩy, dấu cách và các ký hiệu khác. Các số ngẫu nhiên trong keystream sau đó phải có ít nhất từ ​​0 đến 25. Để mã hóa (encrypt), chúng ta thêm các số của keystream vào bản rõ. Và để giải mã (decrypt), chúng ta trừ các số của keystream khỏi bản mã để có được bản rõ.

Nếu số của bản mã trở nên lớn hơn 25, chúng tôi bọc nó thành một giá trị trong khoảng từ 0-25. Do đó, 26 trở thành 0 và 27 trở thành 1, v.v. (Bọc như vậy được gọi là số học mô-đun). Ở đây, bản rõ thông điệp "attack at dawn" được kết hợp bằng cách cộng với keystream "kjcngmlhylyu" và tạo ra bản mã "kcvniwlabluh".

Plaintext a t t a c k a t d a w n
Plaintext as numbers 0 19 19 0 2 10 0 19 3 0 22 13
Keystream k j c n g m l h y l y u
Keystream as numbers 10 9 2 13 6 12 11 7 24 11 24 20
Ciphertext as numbers 10 28 21 13 8 22 11 26 27 11 46 33
Ciphertext as numbers
wrapped to 0-25
10 2 21 13 8 22 11 0 1 11 20 7
Ciphertext as text k c v n i w l a b l u h
Learning English Everyday