1. Trang chủ
  2. » Tất cả

Tìm hiểu về mã hóa dòng

18 7 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Tìm hiểu về mã hóa dòng
Tác giả Cao Minh Thắng
Trường học Học viện Công nghệ Bưu chính Viễn thông
Chuyên ngành Mật mã học
Thể loại Báo cáo
Năm xuất bản 2021
Thành phố Hà Nội
Định dạng
Số trang 18
Dung lượng 302,31 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

BỘ THÔNG TIN VÀ TRUYỀN THÔNG TẬP ĐOÀN BƯU CHÍNH VIỄN THÔNG VIỆT NAM HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG MẬT MÃ HỌC CƠ SỞ CHỦ ĐỀ TÌM HIỂU VỀ MÃ HÓA DÒNG Giảng viên Cao Minh Thắng Hà Nội, ngày 08 th[.]

Trang 1

BỘ THÔNG TIN VÀ TRUYỀN THÔNG TẬP ĐOÀN BƯU CHÍNH VIỄN THÔNG VIỆT NAM

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG

MẬT MÃ HỌC CƠ SỞ CHỦ ĐỀ: TÌM HIỂU VỀ MÃ HÓA DÒNG

Giảng viên: Cao Minh Thắng

Hà Nội, ngày 08 tháng 05 năm 2021

Trang 2

MỤC LỤC

Trang 3

I Giới thiệu về mật mã dòng

1 Mật mã dòng là gì?

Mã hóa dòng: là kiểu mã hóa mà từng bit (hoặc từng ký tự) của thông điệp được kết hợp với từng bit (hoặc từng ký tự) tương ứng của khóa để tạo thành bản mã

2 Đặc trưng cơ bản của mật mã đòng

- Kích thước một đơn vị mã hóa là: k bit

- Thông điệp được chia thành các đơn vị mã hóa:

P→P0P1P2 Pn-1 < length(Pi ) = k bit>

- Một bộ sinh số ngẫu nhiên: Dùng khóa K ban đầu để sinh ra các số ngẫu nhiên

có kích thước bằng kích thước của đơn vị mã hóa:

StreamCipher(K) → S = S0S1S2 Sn-1 < length(Si ) = k

bit>

Mỗi đơn vị mã hóa được XOR tương ứng với số ngẫu nhiên để cho ra bản mã

C0=P0 ⊕ S0, C1=P1 ⊕ S1 ……., Cn-1=Pn-1 ⊕ Sn-1 → C=C0C1C2…Cn-1;

- Quá trình giải mã là một quá trình ngược lại, bản mã được XOR với bộ sinh số ngẫu nhiên cho ra thông điệp

Trang 4

P0=C0 ⊕ S0, P1=C1 ⊕ S1 ……., Pn-1=Cn-1 ⊕ Sn-1 → P=P0P1P2…Pn-1

2 Lịch sửa của mã dòng

Kỉ nguyên của mã dòng thực sự và vào những năm 1960 Vào thời điểm đó, rất nhiều tổ chức sử dụng đến mã dòng như những nhu cầu cảu quân đội hay ngoại giao, các tổ chức gián điệp, các tổ chức cung cấp các dịch vụ viên thông, các doanh nghiệp … Vào thời gian này, những thiết bị mã hóa điện tử bán dẫn bắt đầu xuất hiện Nhiều thiết bị còn có dung lượng bộ nhớ thấp, nên mã dòng trở nên phổ biến hơn mã khối

3 Một số ứng dụng của mã dòng

Mã hóa trong mạng điện thoại GSM, bảo mật dữ liệu trong quá trình liên lạc giữa điện thoại và trạm thu phát sóng vô tuyến (Thuật toán mã hóa A5/1)

Dùng trong giao thức SSL để bảo mật dữ liệu trong quá trình truyền dữ liệu giữa Web server và Client, hoặc mã hóa WEP của mạng Wireless LAN (Tiny RC4)

4 So sánh Mã hóa khối, Mã hóa dòng

- Mã hóa khối chia plant-text nhiều khối

và chuyển chúng thành cipher-text

- Có thể mã hóa 64 bits hoặc nhiều hơn

- Mã hóa dòng mã hóa từng kí tự

của plant-text thành cipher-text

- Chỉ có thể mã hóa 8 bits một lần

Trang 5

- Đơn giản hơn so với mã dòng

- Sử dụng cả tính xáo trộn cũng như

khuếch tán

- Giải mã phức tạp

- Tốc độ mã hóa và giải mã chậm

- Phức tạp hơn so với mã khối

- Chỉ có tính khuếch tán

- Giải mã đơn giản hơn

- Tốc độ mã hóa và giải mã cao

II Mật mã Salsa20

1 Giới thiệu mật mã

Salsa20 là một mật mã đối xứng dòng hiện đại và hiệu quả Nó được thiết kế vào năm 2005 bởi Daniel Bernstein, giáo sư nghiên cứu Khoa học Máy tính tại Đại học Illinois tại Chicago

Salsa20 là một công cụ mã hóa dòng hoạt động trên các khối dữ liệu có kích thước

64 byte

2 Lịch sử hình thành

- eSTREAM là một dự án mã dòng của ECRYPT (European Network of

E-Excellence for Cryptology) và được thành lập vào năm 2005 Mục tiêu chính là để tạo điều kiện cho giới thiệu về sự bảo mật và sự hữu hiệu của mã dòng cho sự sử dụng rộng rãi và phổ cập Vào năm 2005, đáp lại sự kêu gọi của eSTREAM cho một loại mã hóa dòng mới, 34 loại mã hóa dòng đã được gửi đi và Salsa20 là một trong những ứng viên còn trụ lại cuối cùng

- Salsa20 là một mật mã đã được đệ trình cho dự án eSTREAM, chạy từ năm 2004 đến năm 2008, được cho là để thúc đẩy sự phát triển của mật mã dòng Nó được coi là một thuật toán được thiết kế tốt và hiệu quả Không có bất kỳ cuộc tấn công nào được biết đến và hiệu quả vào họ mật mã Salsa20

- 20 – vòng Salsa20/20 nhanh hơn Mã hóa tiêu chuẩn nâng cao (AES) và cung cấp

sự bảo mật tốt hơn Bản đầy đủ của Salsa20/20 được đề xuất bởi nhà thiết kế mã hóa cho những ứng dụng của mật mã học Theo thời gian, các biến thể của

Salsa20/20 nhằm giảm số vfong là Salsa20/12 và Salsa20/8 xuất hiện Phiên bản tối giản của Salsa20 là nhanh nhất trong số các loại mã hóa dòng thời bấy giờ và được đề xuất ứng dụng cho những nơi mà tốc độ quan trọng hơn cấp độ bảo mật

Trang 6

- Mã hóa dòng Salsa20/20 và các phiên bản giảm thiểu số vòng duyệt,

Salsa20/12và Salsa20/8, đã được chọn bởi eSTREAM để trở thành số ít tiêu chuẩn cho sự lựa chọn rộng rãi Mặc dù vậy, một số tranh cãi nổ ra trước sự sử dụng rộng rãi của phương thức vận hành toán học đơn giản và XOR ở trong Salsa20

- Tính bảo mật của Salsa20/7 đã bị phá vỡ bởi một phương thức tấn công khác: Aumasson et al concluded via cryptanalytic papers by Fischer et al, đã có 2151 sự phân tích cần thiết để phá được 7 vòng của 256 bit của Salsa20

3 Phân tích thiết kế, thuật toán của mật mã

3.1 Mã hóa

Đối với mỗi khối dữ liệu 64 byte, thuật toán sử dụng hàm mở rộng Salsa20 Đầu

vào cho hàm là khóa bí mật (có thể có 32 hoặc 16 byte) và nonce dài 8 byte được ghép nối với một số khối bổ sung, các giá trị thay đổi từ 0 thành 264-1 (nó cũng được lưu trữ trên 8 byte) Mỗi cuộc gọi đến hàm mở rộng tăng số khối lên một

Cốt lõi của thuật toán mã hóa Salsa20 là hàm băm nhận dữ liệu đầu vào dài 64

byte từ hàm mở rộng Salsa20, trộn nó và cuối cùng trả về đầu ra dài 64 byte Hàm băm Salsa20 hoạt động trên chuỗi byte nhận được, bao gồm:

● chìa khóa bí mật

Trang 7

● nonce với số khối.

● bốn vectơ không đổi nhận được từ hàm mở rộng, các giá trị phụ

thuộc vào kích thước của khóa bí mật

Hàm băm hoạt động trên dữ liệu được chia thành các từ Mỗi từ chứa 4 byte và có

thể có giá trị từ 0 đến 232-1 Do đó, dữ liệu đầu vào dài 16 từ, khóa chứa 8 hoặc 4

từ và nonce có 2 từ

Đầu ra từ hàm mở rộng Salsa20 được thêm XOR vào khối dữ liệu 64 byte Kết quả

là một khối mật mã 64 byte

Phân tích

● 3 đầu vào được xác định là các seed cho salsa20 Các seed đó là 32-byte khóa bí mật, 8 byte Nounce và 8 byte giá trị của Khối chặn Ở trạng thái ban đầu, các seed này sẽ được thêm vào hoặc trộn lẫn với 16 byte cố định ở trong hàm mở rộng để tạo ra 1 khối 64 byte Mô hình dưới là sơ đồ khối của Salsa20

● Hàm mở rộng bị đẩy ra bởi hàm băm Salsa Thực chất, giai đoạn gọi ra hàm băm Salsa được coi là 2 vòng của Salsa20 Bởi hàm băm Salsa gọi ra round

Trang 8

function 2 lần Do vậy, mỗi lần gọi hàm băm Salsa sẽ ứng với 2 vòng của Salsa20 Như sơ đồ trên, sau 2 vòng, chỉ có 50% của khối 64 byte bị thay đổi

● Khuyếch tán là một trong những đặc tính quan trọng của một bản mã hóa tốt Chỉ có 1 byte khác biệt ở đầu vào của 2 khối liên tục bất kỳ Sự khác biệt này được biết đến như là bit Khối chặn Mặc dù có một sự thay đổi nhẹ ở đầu vào của Salsa20, sự khuếch tán tốt của sản phẩm mã hóa sau 4 vòng xáo trộn

● Kết thúc vòng 4, tất cả các bit của mỗi 16 từ đều sẽ bị thay đổi Thông

thường, hàm băng Salsa bắt đầu với khối khác với khối trước nằm trên các bit khối chặn Kết quả, XOR của 2 khối sẽ là 0 cho tất cả các thành phần, ngoại trừ sự khác biệt của khối chặn 2 ma trận dưới là ví dụ của 2 khối Salsa20 liên tiếp mà điểm khác biệt duy nhất đó là số của khối chặn

Ma trận sau là XOR của 2 ma trận trên

● Theo như bản phân tích này, nó sẽ tốt hơn khi chắc chắn rằng từng từ ở trong khối Salsa20 được xáo trộn lên trước khi vòng 3 bắt đầu Do vậy, một mạng XOR sẽ được sử dụng sau vòng thứ 2

● Một trong những mục tiêu của học phần này là đạt được độ khuếch tán tốt sau ít hơn 4 vòng Trong phần tiép theo, mục đích của mạng XOR là được thực hiện sau vòng 2 để củng cố sự ngẫu nhiêm của bản mã bằng cách chắc chắn rằng tất cả các byte của khối 64 byte đều được thay đổi

● Một điểm yếu khác của Salsa20 đó là chỉ có 1 bit khác biệt ở trong các khối đầu vào của Salsa20 Khi mà sự khác biệt gữa 2 khối liên tục là rất nhỏ (trong trường hợp của Salsa20 thì là 1 bit), khác biệt nhỏ đấy có thể dẫn đến sự tấn công khác Mục đích của việc thiết kế - điều mà đã làm rõ trong phần trước, một bản đồ

Trang 9

logic hỗn loạn dược sử dụng như chìa khóa gây rối, thứ khiến cho điểm khác biệt của đầu vào khối tăng lên 33-bits

3.2 Giải mã

Thuật toán tương tự nên được sử dụng trong quá trình giải mã Dữ liệu nên được chia thành các phần có cùng kích thước

Đầu ra từ hàm mở rộng Salsa20 nên được thêm XOR vào khối bản mã 64 byte Kết quả là một khối bản rõ dài 64 byte

3.3 Các hàm toán học

Các hoạt động cho thuật toán Salsa20 được trình bày theo thứ tự từ các hàm cấp thấp đến các hàm phức tạp hơn, sử dụng các hàm được mô tả ở trên

1 Tổng của hai từ

Việc cộng hai từ 4 byte được biểu thị trong mô tả thuật toán là a + b Kết quả

được chia modulo cho 2 32 (vì vậy, bởi giá trị lớn nhất có thể được lưu trữ trong một từ)

Tổng của hai từ a và b bằng a + b mod 2 32 Kết quả là một từ dài 4 byte hợp lệ

2 Exclusive-Or trong 2 từ

Exclusive-Or của hai từ 4 byte được biểu thị trong mô tả thuật toán là XOR b

Để thực hiện phép cộng XOR, hai từ được so sánh từng bit và phép cộng XOR được thực hiện cho từng cặp Kết quả cũng là một từ dài 4 byte thích hợp hợp lệ

Các một -bit xoay trái của một từ 4-byte w được ký hiệu trong thuật toán như w

<<< một Tận cùng bên trái một bit di chuyển đến các vị trí ngoài cùng bên phải.

Phép quay các bit sang trái w <<< a của một từ 4 byte w có thể được biểu diễn dưới dạng phép nhân: 2 a · w mod (2 32 -1)

Kết quả là một từ dài 4 byte hợp lệ

3 Hàm Quarterround

Hàm Quarterround lấy 4 từ làm đầu vào và trả về một chuỗi 4 từ khác

Trang 10

● ⊞ add

● ‹‹‹ rotate

● ⊕ xor

Nếu x là đầu vào gồm 4 từ: x = (x0, x1, x2, x3) thì hàm có thể được định nghĩa như sau:

Quarterround(x) = (y0 ,y1, y2, y3)

Trong đó:

y 1 =x 1 XOR ((x 0 +x 3 ) <<< 7)

y 2 =x 2 XOR ((y 1 +x 0 ) <<< 9)

y 3 =x3 XOR ((y 2 +y 1 ) <<< 13)

y 0 = x 0 XOR ((y 3 + y 2 ) <<< 18)

Chức năng Quarterround có thể được thực hiện tại chỗ mà không cần cấp phát thêm bất kỳ bộ nhớ nào Đầu tiên, x 1 chuyển thành y 1 , sau đó x 2 chuyển thành

y 2 , tiếp theo x 3 chuyển thành y 3 , sau đó x 0 chuyển thành y 0 Chức năng

Trang 11

Quarterround là không thể đảo ngược vì tất cả các sửa đổi ở trên đều có thể đảo ngược

4 Chức năng Rowround

Hàm Rowround nhận 16 từ làm đầu vào, biến đổi chúng và trả về chuỗi 16 từ Hàm này rất giống với Hàm Columnround nhưng nó hoạt động dựa trên các từ theo một thứ tự khác Nếu x là đầu vào gồm 4 từ:

x = (x0, x1, x2,…, x15) thì hàm có thể được định nghĩa như sau:

rowround(x) = (y0 ,y1, y2,…, y15)

Trong đó:

(y0 ,y1, y2, y3) = quarterround(x0, x1, x2, x3)

(y5, ,y6, y7, y4) = quarterround(x5, x6, x7, x4)

(y10 ,y11, y8, y9) = quarterround(x10, x11, x8, x9)

(y15 ,y12, y13, y14) = quarterround(x15, x12, x13, x14)

Đầu vào gồm 16 từ có thể được trình bày dưới dạng ma trận vuông:

Các hàng trong ma trận có thể được thay đổi song song Mỗi người trong số họ được sửa đổi bởi Chức năng Quarterround

Trong hàng đầu tiên, các từ được thay đổi theo thứ tự sau:

Trang 12

Trong hàng thứ hai, các từ được thay đổi theo thứ tự sau:

Trong hàng thứ ba, các từ được sửa đổi theo thứ tự:

Cuối cùng, ở hàng cuối cùng, thứ tư, các từ được thay đổi theo thứ tự:

Trang 13

5 Chức năng Columnround

Hàm Columnround lấy 16 từ làm đầu vào và trả về chuỗi 16 từ

Hàm này rất giống với Hàm Rowround nhưng hoạt động trên các từ theo thứ tự khác nhau

Nếu x là đầu vào gồm 16 từ:

x = (x 0 , x 1 , x 2 , , x 15 ) thì hàm có thể được định nghĩa như sau:

columnround (x) = (y 0 , y 1 , y 2 , , y 15 ) trong đó:

(y 0 , y 4 , y 8 , y 12 ) = phần tư (x 0 , x 4 , x 8 , x 12 )

(y 5 , y 9 , y 13 , y 1) = phần tư (x 5 , x 9 , x 13 , x 1 )

(y 10 , y 14 , y 2 , y 6 ) = phần tư (x 10 , x 14 , x 2 , x 6 )

(y 15 , y 3 , y 7 , y 11 ) = phần tư (x 15 , x 3 , x 7 , x 11 )

Đầu vào gồm 16 từ có thể được trình bày dưới dạng ma trận vuông:

Trang 14

Các cột trong ma trận có thể được thay đổi song song Mỗi người trong số họ được sửa đổi bởi Chức năng Quarterround Trong cột đầu tiên, các từ được thay đổi theo thứ tự sau:

Trong cột thứ hai, các từ được sửa đổi theo thứ tự sau:

Trong cột thứ ba, các từ được thay đổi theo thứ tự:

Trang 15

Trong cột thứ tư cuối cùng, các từ được sửa đổi theo thứ tự:

6 Doubleround Function

Hàm Doubleround lấy 16 từ làm đầu vào và trả về chuỗi 16 từ

Nếu x là đầu vào gồm 16 từ, thì Hàm Doubleround có thể được định nghĩa như

sau:

doubleround (x) = rowround (columnround (x))

7 Littleendian Function

Hàm Littleendian thay đổi thứ tự của một chuỗi 4 byte

Nếu b là một chuỗi bốn byte:

b = (b 0, b 1, b 2, b 3) thì hàm được xác định là:

littleendian (b) = b 0 + 2 8 b 1 + 2 16 b 2 + 2 24 b 3

Trang 16

Hàm Littleendian không thể đảo ngược Nó chỉ đơn giản là thay đổi thứ tự của các byte trong một từ

8 Salsa20 Hash Function

Hàm băm Salsa20 lấy 64 byte làm đầu vào và trả về một chuỗi 64 byte

Đầu tiên, Hàm băm tạo 16 từ từ đầu vào 64 byte nhận được Nếu đầu vào là một

chuỗi 64 byte:

input = (b 0 , b 1 , b 2 , , b 63 ) thì 16 từ được tạo như sau:

w 0 = littleendian (b 0 , b 1 , b 2 , b 3 )

w 1 = littleendian (b 4 , b 5 , b 6 , b 7 )

[ ]

w 15 = littleendian (b 60 , b 61 , b 62, b 63 )

Sau đó, tất cả 16 từ được sửa đổi bởi 10 lần lặp lại của Hàm Doubleround:

(x 0 , x 1 , , x 15 ) = doubleround 10 (w 0 , w 1 , , w 15 ) Cuối cùng, 16 từ nhận được làm đầu vào được thêm (như mô tả ở trên) vào 16 từ

đã sửa đổi và thay đổi thành 64 byte mới bằng cách sử dụng Hàm Littleendian Các

byte được xuất ra từ Hàm băm Salsa20:

output = littleendian -1 (x 0 + w 0 ) + littleendian -1 (x 1 + w 1 ) + + littleendian

-1 (x 15 + w 15 )

9 Salsa20 Expansion Function

Hàm mở rộng Salsa20 nhận hai chuỗi byte Dãy đầu tiên có thể có 16 hoặc 32 byte

và dãy thứ hai ( n ) luôn dài 16 byte Hàm trả về một chuỗi 64 byte khác.

Nếu chuỗi đầu tiên dài 32 byte, thì nó được chia thành hai chuỗi ngắn hơn 16 byte

( k 0 và k 1 ) Hàm mở rộng Salsa20 được xác định bằng cách sử dụng Hàm băm Salsa20, như được hiển thị bên dưới:

Salsa20Expansion k 0 , k 1 (n) = Salsa20Hash (a 0 , k 0 , a 1 , n, a 2 , k 1 , a 3 )

trong đó :

a 0 = (101, 120, 112, 97)

a 1 = (110, 100, 32, 51)

a 2 = (50, 45, 98, 121)

a 3 = (116, 101, 32, 107)

Nếu chuỗi đầu tiên dài 16 byte ( k ), thì Hàm mở rộng Salsa20 được xác định bằng

cách sử dụng Hàm băm Salsa20 như sau:

Salsa20Expansion k (n) = Salsa20Hash (b 0 , k, b 1 , n, b 2 , k, b 3 ) trong đó:

b 0 = (101, 120, 112, 97)

b 1 = (110, 100, 32, 49)

Trang 17

b 2 = (54, 45, 98, 121)

b 3 = (116, 101 , 32, 107)

Các giá trị không đổi của vectơ (a 0 , a 1 , a 2 , a 3 ) có nghĩa là ' mở rộng k 32 byte '

trong mã ASCII Tương tự, các giá trị không đổi của vectơ thứ hai (b 0 , b 1 , b 2 ,

b 3 ) có nghĩa là ' mở rộng k 16 byte ' trong ASCII.

3.4 Các mật mã Salsa20 khác

Ngoài ra còn có một số mật mã khác, dựa trên thuật toán Salsa20 nhưng khác nhau

về chi tiết

+ Salsa20 / 8 và Salsa20 / 12 - chúng hoạt động chính xác như thuật toán Salsa20 ban đầu nhưng thay vì 10 cách ghép đôi bên trong hàm băm, chúng thực hiện 4 hoặc 6 cách ghép đôi tương ứng

+ Họ ChaCha - được Bernstein xuất bản vào năm 2008 Chúng cung cấp khả năng bảo mật tốt hơn so với mật mã Salsa20 ban đầu, bằng cách sử dụng các hàm băm tốt hơn một chút Dữ liệu đầu vào của hàm băm đã được sắp xếp lại để cho phép triển khai thuật toán theo cách hiệu quả hơn

4 Ưu diểm – Nhược điểm

Ưu điểm: - Tính khuếch tán

- Giải mã đơn giản hơn

- Tốc độ mã hóa và giải mã cao

Nhược điểm: - Mã hóa dòng mã hóa từng kí tự của

- plant-text thành cipher-text

- Chỉ có thể mã hóa 8 bits một lần

- Phức tạp hơn so với mã khối

5 Ứng dụng

Mã hóa trong mạng điện thoại GSM

- Bảo mật dữ liệu trong quá trình liên lạc giữa điện thoại và trạm thu phát

sóng vô tuyến (Thuật toán mã hóa A5/1)

Trong giao thức SSL

- Bảo mật dữ liệu trong quá trình truyền dữ liệu giữa Web server và Client,

Ngày đăng: 24/02/2023, 13:08

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w