Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (491.08 KB, 7 trang )
<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>
<i><b>Tóm tắt:</b> Bảo vệ thông tin bằng phương pháp mật mã là giải pháp hữu hiệu hiện </i>
<i>nay, đặc biệt trong lĩnh vực Quốc phòng - An ninh. Đối với các hệ mật, độ mật phụ </i>
<i>thuộc chủ yếu vào khóa mã. Bởi vậy vấn đề sinh khóa mã để đảm bảo an tồn cho hệ </i>
<i>mật ln mang tính thời sự và thực tiễn trong lĩnh vực bảo mật thông tin hiện nay. Có </i>
<i>hai phương pháp sinh khóa cơ bản là sinh khóa ngẫu nhiên và phương pháp sinh </i>
<i>khóa giả ngẫu nhiên. Tuy nhiên, hiện nay bài tốn sinh khóa giả ngẫu nhiên đang </i>
<i>được quan tâm nghiên cứu nhiều hơn. Nội dung bài báo sẽ trình bày phương pháp tạo </i>
<i>dãy giả ngẫu nhiên mới, sử dụng thuật toán sinh các bit ngẫu nhiên dựa trên tổ hợp </i>
<i>các thanh ghi dịch phản hồi tuyến tính (LFSR) đáp ứng yêu cầu nâng cao độ an toàn </i>
<i>của khóa mã sử dụng trong các hệ mật mã đối với lĩnh vực ANQP. </i>
<b>Từ khóa</b>: Bit giả ngẫu nhiên, Thanh ghi dịch NFSR, Bộ tạo bit giả ngẫu nhiên, Mật mã, Thám mã;
<b>1. ĐẶT VẤN ĐỀ </b>
Khi sử dụng giải pháp bảo vệ thông tin bằng mật mã, một câu hỏi đặt ra là “độ an tồn
của thơng tin được khẳng định như thế nào khi ứng dụng kỹ thuật mật mã ?”. Ta biết rằng,
sự an tồn của thơng tin hồn tồn phụ thuộc vào độ an toàn của hệ mật sử dụng, tức là
phụ thuộc vào hai yếu tố là khóa mã và thuật tốn mã hóa. Trong các giao dịch thương mại
điện tử, thường các thuật tốn mã hóa được công khai, bởi vật độ an tồn của thơng tin
hồn tồn chỉ cịn phụ thuộc vào độ an tồn của khóa mã. Đối với các hệ mật sử dụng khóa
giả ngẫu nhiên, để tạo ra khóa mã cho mỗi phiên liên lạc người ta phải cung cấp một “số
ngẫu nhiên ban đầu” cho thuật tốn sinh khóa, trong q trình mã hóa thuật tốn mã hóa sẽ
tạo ra khóa mã dịch cho phiên liên lạc đó. Số ngẫu nhiên ban đầu cung cấp cho hệ mật
được gọi là “Mầm khóa” (Key Seed). Như vậy có thể nói, độ an toàn của hệ mật sẽ phụ
thuộc vào mầm khóa và thuật tốn sinh khóa.
Giả sử trong trường hợp mã thám biết thuật tốn sinh khóa, khi đó độ mật của hệ mật
sẽ chỉ cịn phụ thuộc vào mầm khóa. Do mầm khóa là dãy bit có độ dài hữu hạn, bởi vậy
việc tấn cơng khai thác mầm khóa mã thám thường sử dụng tấn công vét cạn. Đối với tấn
công vét cạn, thời gian tấn công sẽ phụ thuộc vào độ dài của mầm khóa. Để chống lại tấn
cơng vét cạn người ta buộc phải nâng độ dài của mầm khóa. Điều này dẫn đến lực lượng
của không gian cung cấp mầm khóa phải đủ lớn để chống lại tấn cơng. Để chống lại các
tấn cơng vét cạn để tìm khóa đúng, khơng gian mầm khóa phải “đủ lớn” và việc chọn mầm
khóa để sinh khóa phải hồn tồn ngẫu nhiên. Tuy nhiên, khơng gian mầm khóa được thể
hiện qua độ dài khóa, độ dài khóa càng dài thì khơng gian khóa càng lớn. Nếu độ dài mầm
là <i>k </i>thì lực lượng khơng gian mầm sẽ là 2<i>k</i> khóa mầm.
Một số ví dụ điển hình chứng minh điều nhận xét ở trên:
- Đối với chuẩn mã hóa DES độ dài mầm khóa là 56 bit, khơng gian khóa của DES có
lực lượng là 256. Khi mới ra đời, khơng gian khóa như vậy là đủ lớn để có thể chống lại tấn
cơng vét cạn tìm khóa đúng. Tuy nhiên, do sự phát triển của cơng nghệ tính tốn ngày nay,
độ dài khóa như vậy chưa đủ để chống lại khả năng vét cạn của các cơ quan mã thám.
Đối với mã thám khi không khai thác được mầm khóa và thuật tốn sinh khóa, họ sẽ
tìm cách tấn công trực tiếp vào bản mã dựa trên thuật tốn mã hóa.
Một trong những ví dụ điển hình tấn cơng thuật tốn mã hóa trên bản mã là thuật toán
IDEA (International Data Encryption Algorithm), thuật toán này sử dụng độ dài mầm khóa
128 bit, gọi là “đủ lớn” hiện nay, tương đương với khơng gian khóa là 2128 phần tử, tức là
1632 phần tử. Tuy nhiên, do đây là thuật toán mã khối (block), với thông báo rõ được chia
thành từng khối 8 ký tự, mỗi khối cùng một khóa mã cho trước. Thuật toán sẽ mã lần lượt
khối đầu tiên cho đến khối cuối cùng. Nếu coi mỗi block gồm 8 ký tự là một thơng báo thì
thuật tốn mã trùng khóa (khóa có lặp lại). Ở đây, có hai điểm mã thám sẽ sử dụng để tấn
công bản mã. Đó là:
- Khi viết dọc khối thứ nhất trên khối thứ hai; khối thứ hai trên khối thứ 3,.v.v. cho đến
khối cuối cùng, sau đó tính tần số xuất hiện các ký tự theo cột (có 8 cột tất cả) sẽ phát hiện
ra một số quy luật giúp cho tấn cơng.
- Trong thuật tốn mã hóa có sự tương ứng 1-1 giữa khối rõ với khối mã. Nhưng số các
khối rõ gồm 8 ký tự có thể có đối với ngơn ngữ tiếng Anh là 268, do đó số các khối mã
tương ứng nhiều nhất là 268và khơng gian khóa thực tế nhiều nhất là 268 khóa có thể có.
Từ đó, nếu có một thuật tốn thực hiện phân hoạch khơng gian khóa
Qua các kết quả cơng bố trong và ngồi nước mà nhóm tác giả được tiếp cận, cũng như
việc phân tích ở trên, có thể thấy rằng độ mật của hệ mật phụ thuộc vào độ an tồn của
khóa mã dịch, hay nói một cách khác là phụ thuộc vào độ dài của mầm khóa và độ phức
tạp của thuật tốn sinh khóa.
Do vậy, việc nghiên cứu sinh khóa giả ngẫu nhiên sử dụng trong mật mã đóng vai trị
rất quan trọng. Bài báo đã tìm hiểu một số thuật toán tạo dãy giả ngẫu nhiên đã được cơng
bố trong và ngồi nước, trên cơ sở nghiên cứu nhóm tác giả đưa ra một thuật tốn tạo khóa
giả ngẫu nhiên đáp ứng cho yêu cầu bảo mật Quốc phòng - An ninh hiện nay bằng mật mã.
<b>2. MỘT SỐ KHÁI NIỆM CƠ SỞ </b>
<b>2.1. Một số định nghĩa</b>
<i>Định nghĩa 1</i>: Một thuật toán sinh bit giả ngẫu nhiên được gọi là tất định
(deterministic) nếu cho trước một dãy nhị phân ngẫu nhiên có độ dài <i>k</i>thì đầu ra của nó là
một dãy bit giả ngẫu nhiên độ dài
<i>Định nghĩa 2</i>: Một thuật toán sinh bit giả ngẫu nhiên được gọi là thuật toán sinh bit giả
<b>2.2. Một số thuật toán sinh bit giả ngẫu nhiên [4] </b>
<i>2.2.1. Thuật toán tạo bit giả ngẫu nhiên bởi thuật toán RSA </i>
Cho hệ mật RSA: <i>n</i> <i>p</i><i>q</i> với <i>p</i>,<i>q</i> là hai số nguyên tố khác nhau và đủ lớn. Đặt:
Lấy <i>b</i> là một số nguyên sao cho:
Lấy một số <i>r</i><i>Z<sub>n</sub></i>* và tính:
<i>i</i>
<i>i</i>
Lúc đó, dãy
<i>2.2.2. Thuật toán tạo bit giả ngẫu nhiên BBS (Blum_Blum_Shub) </i>
Thuật tốn: Chọn <i>n</i> <i>p</i><i>q</i>, trong đó <i>p</i>,<i>q</i> là 2 số nguyên tố khác nhau sao cho
)
(<i>n</i>
<i>Q</i>
<i>r</i> , xác định dãy số
1
2
<i>n</i>
<i>x</i>
<i>x<sub>i</sub></i><sub></sub><sub>1</sub> <i><sub>i</sub></i>2mod (2.5)
3
4
<i>2.2.3. Thuật toán tạo bit ngẫu nhiên dựa trên bài toán logarit rời rạc </i>
Cho <i>p</i>là một số nguyên tố đủ lớn,
<i>n</i>
<i>x</i>
<i>x<sub>i</sub></i><sub></sub><sub>1</sub> <i><sub>i</sub></i>2mod (2.6)
1 mod
<i>i</i>
<i>x</i>
<i>i</i>
<i>x</i> <i>p</i> bây giờ đặt:
1
2
0
2
<i>i</i>
<i>i</i>
<i>i</i>
<i>p</i>
<i>ifx</i>
<i>Z</i>
<i>p</i>
<i>ifx</i>
<sub></sub>
(2.7)
1, 2,..
<i>Z</i><i>Z Z</i> là dòng bit giả ngẫu nhiên được sinh ra từ bài toán logarit rời rạc.
<b>2.3. Nhận xét</b>
Các thuật toán sinh dãy bit giả ngẫu nhiên đã trình bày có ưu điểm là đơn giản và chất
lượng của các dãy đó tuy chưa có đánh giá bằng 5 tiêu chuẩn thống kê điển hình nhất
nhưng tính đồng xác suất được hiện rõ. Tuy nhiên, việc cứng hóa modul mật mã khi ứng
dụng các thuật tốn tạo dãy giả ngẫu nhiên này phức tạp và dãy bit đó rất dễ tuần hồn có
chu kỳ khơng đủ lớn. Bởi vậy, cùng với một số lý do khác, chẳng hạn việc xác định một
phần tử là nguyên thủy
<b>3. ĐỀ XUẤT THUẬT TOÁN TẠO CHUỖI BIT GIẢ NGẪU NHIÊN </b>
<b>ỨNG DỤNG CHO GIAO THỨC MẬT MÃ </b>
<i>3.1.1. Định nghĩa </i>
<i>Định nghĩa 1</i>: Thanh ghi dịch phản hồi tuyến tính (LFSR) độ dài <i>L</i> gồm <i>L</i> trạng thái (<i>L</i>
ơ) được đánh số từ 0,1,2,..,<i>l</i>1; mỗi ô chứa một bit 0/1 và có một đầu vào và một đầu ra.
Đồng thời liên hệ với một đồng hồ nhằm điều khiển việc dịch chuyển dữ liệu của thanh <i>R</i>.
<i> Định nghĩa 2</i>: Thanh ghi dịch <i>R</i> được ký hiệu:
)
(
,<i>C</i> <i>x</i>
<i>R</i> <sub>(3.1)</sub>
trong đó:
<i>L</i>
<i>Lx</i>
<i>C</i>
<i>x</i>
<i>C</i>
<i>x</i>
<i>C</i>( )1 1 1... <i>GF</i>(2)[<i>x</i>] (3.2)
là đa thức kết nối (connection polynomial). Thanh ghi dịch tuyến tính <i>R</i> được gọi là khơng
suy biến (nonsingular) nếu bậc của <i>C(x)</i> là <i>L</i>, tức là <i>CL=1</i>.
Giả sử nội dung của ô thứ <i>i</i> là <i>si</i>{0,1}, đối với mỗi <i>i</i>0,1,..,<i>L</i>1. Khi đó, dãy
Định nghĩa 3: Cho:
]
)[
2
(
)
(<i>x</i> <i>GF</i> <i>x</i>
<i>C</i> là đa thức nguyên thủy (primitive polynomial) bậc L.
Khi đó, ( <i>L</i>,<i>C</i>(<i>x</i>)) được gọi là LFSR có độ dài cực đại (maximum length).
Đầu ra của LFSR có độ dài cực đại với trạng thái ban đầu khác 0 được gọi là maximum
sequence (m_sequence). Khi đó với mỗi một 2<i>L</i> 1 trạng thái ban đầu khác 0 của một
thanh ghi dịch phản hồi tuyến tính LFSR sẽ sinh ra một dãy giả ngẫu nhiên có chu kỳ cực
đại là
Từ đó suy ra rằng để tạo thanh ghi dịch phản hồi tuyến tính có chu kỳ cực đại
là số nguyên tố
mersenne).
<i>3.1.2. Các khẳng định </i>
<i>Khẳng định 1</i>: Nếu trạng thái ban đầu của LFSR là
, 1
0 <i>S</i>
<i>S</i>
<i>S</i> được xác định một cách duy nhất bởi phép đệ quy (recursion) sau đây:
<i>J</i> <i>CS</i> <i>C</i> <i>S</i> <i>C</i> <i>S</i>
<i>S</i> <sub></sub> <sub></sub> <sub></sub> (3.3)
đối với <i>j</i><i>L</i>.
<i>Khẳng định 2</i>: Với mọi dãy đầu ra của một LFSR
<i>N</i>sao cho <i>N</i>
<i>x</i>
1 chia hết cho <i>C</i>(<i>x</i>)(có nghĩa là đa thức <i>C</i>(<i>x</i>)nguyên thủy trên trường
)
2
(
<i>GF</i> [15].
<b>3.2. Thuật toán sinh dãy giả ngẫu nhiên được đề xuất </b>
<i>3.2.1. Cấu tạo hệ thống các thanh ghi dịch phản hồi phi tuyến </i>
dịch phải là số nguyên tố; Nếu có nhiều thanh ghi dịch độ dài khác nhau thì các độ dài của
chúng phải nguyên tố với nhau từng đôi một hoặc bằng nhau. Trong bài này, chúng tôi
chọn 5 thanh ghi dịch với độ dài bằng nhau (bằng 31).
Giả sử, ta có <i>K</i> thanh ghi dịch phản hồi tuyến tính, ký hiệu là <i>R</i><sub>1</sub>,<i>R</i><sub>2</sub>,..<i>R<sub>K</sub></i>, mỗi thanh
ghi dịch
Lược đồ hoạt động của các thanh ghi dịch:
<i>3.2.2. Tạo mầm khóa </i>
Cho một hệ thống khóa gồm 2 khóa, mầm khóa được ký hiệu lần lượt là:
2
1
2
1
2
2
1
1
<i>m</i>
<i>m</i>
(3.4)
Để dễ hình dung, ta lấy
5
4
3
2
1
<i><b>Bảng 1.</b> Bảng véc tơ nhị phân 5 thành phần. </i>
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 3 4 8 9 + /
1 1 0 1 1 1 0 0 0 1 1 0 0 0 0 0 1 0 1 0 1 0 1 1 1 1 0 0 1 0 1 0
1 0 1 0 0 0 1 0 1 1 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0 0 0 1 1 0 1 0
0 0 1 0 0 1 0 1 1 0 1 0 1 1 0 1 1 0 1 0 1 1 0 1 1 0 0 0 1 1 0 0
0 1 1 1 0 1 1 0 0 1 1 0 1 1 1 0 0 1 0 0 0 1 0 1 0 0 1 0 1 0 1 0
0 1 0 0 0 0 1 1 0 0 0 1 1 0 1 1 1 0 0 1 0 1 1 1 1 1 0 0 1 0 1 0
Bây giờ ta đặt:
1( ) 2 .
<i>j</i>
<i>j</i>
<i>j</i>
<i>Z</i>
<i>g</i>
2( ) 2 .
<i>j</i>
<i>j</i>
<i>j</i>
<i>Z</i>
<i>g</i>
(3.5)
Trong đó,
<i><b>Bảng 2.</b> Bảng véc tơ chuyển đổi tương ứng. </i>
<i>3.2.3. Lấp đầy các thanh ghi dịch (5 thanh ghi) </i>
Mầm khóa
Ký hiệu: các vectơ nhị phân của khóa
Ký hiệu <i>y<sub>i</sub></i>(<i>j</i>)là ô thứ
( )
1 1, 5
<i>j</i>
<i>i</i>
<i>y</i> <i>j</i>
( ) ( )
1 , 1, 20, 1,5
<i>j</i> <i>j</i>
<i>i</i> <i>i</i>
<i>y</i><sub></sub> <i>b</i> <i>i</i> <i>j</i>
( ) ( )
21
<i>j</i> <i>j</i>
<i>i</i> <i>i</i>
(3.7)
với <i>c<sub>i</sub></i>( )<i>j</i> là thành phần thứ
(1) (2) (3) (4) (5)
( , , , , ), 1,10
<i>i</i> <i>i</i> <i>i</i> <i>i</i> <i>i</i> <i>i</i>
<i>c</i> <i>c</i> <i>c</i> <i>c</i> <i>c</i> <i>c</i> <i>i</i> <sub> </sub>và
2 1 10
[g ( )-g ( )] mod32
<i>i</i> <i>i</i> <i>i</i>
<i>c</i> <i>d</i> <i>b</i><sub></sub> (3.8)
Nói cách khác 1
2 ( )
<i>i</i> <i>i</i>
Các hàm
1
2<i>j</i> <i>j</i>mod 32
<i>i</i> <i>i</i>
<i>j</i>
<i>g b</i> <i>b</i>
1
2<i>j</i> <i>b i</i>mod 32
<i>i</i> <i>i</i>
<i>j</i>
<i>g b</i> <i>b</i>
(3.9)
Như vậy, sau giai đoạn này cả 31 ô của cả 5 thanh ghi đã được lấp đầy thơng tin nhờ hệ
thống các mầm khóa cho trước
<i>3.2.4. Sự hoạt động của 5 thanh ghi R1,R2,..,R5 </i>
Như vậy sau khi các thanh ghi dịch được nạp đủ trạng thái ban đầu (lấp đầy) và ký hiệu
là ( ) ( ) ( )
1 , 2 ,.., 31
<i>j</i> <i>j</i> <i>j</i>
<i>y</i> <i>y</i> <i>y</i> và <i>j</i>
<i>i</i>
<i>y</i> , <i>i</i>1, 31;<i>j</i>1, 5.
Ta ký hiệu
, ,..,
<i>t</i> <i>t</i> <i>t</i>
là vectơ ngẫu nhiên được các thanh ghi tạo ra ở nhịp
thứ
<i>*) Bước 1</i>: Với
1 , 1 , 1 , 1 , 1
(3.10)
Trong đó,
( ) ( )
1 27, 1,5
<i>j</i> <i>j</i>
<i>y</i> <i>j</i>
<i>*) Bước 2</i>: Với <i>i</i>1, 2,3,.. đặt
( ) ( ) ( )
31 28
<i>j</i> <i>J</i> <i>j</i>
<i>i</i> <i>i</i> <i>i</i>
<i>y</i><sub></sub> <i>y</i> <i>y</i><sub></sub> , <i>j</i>1, 5 (3.11)
<i>*) Bước 3</i>: từ (3.10)(3.11), <i>t</i>2, 3,... tính
<i>t</i> <i>t</i> <i>t</i> <i>t</i> <i>t</i>
, trong đó
)
(
27
)
,
(
)
( <i>j</i>
<i>t</i>
<i>j</i>
<i>t</i>
Và hàm hai biến
(3.13)
đối với <i>j</i> 1,5;<i>t</i>1, 2,3,..
Hàm
(1)
(1, ) 19
(2, )<i>t</i> <i>y</i><sub></sub> <i><sub>t</sub></i> 1
<sub></sub>
( )
( , ) 19
(<i>j</i> 1, )<i>t</i> ( , )<i>j t</i> <i>y</i><i>jj t</i> 1
(3.14)
với <i>j</i>2,3, 4
Từ (3.12), (3.13), (3.14) ta có thể tạo ra được dãy bit giả ngẫu nhiên có độ dài tùy ý
<i>3.2.5. Ví dụ </i>
<i>*) Bước 1</i>: Giả sử ta có:
<i>K1</i>= JOMPC NXRJO MDHJX BVKFM (20 ký tự)
<i>K2</i>= CPWKV EEBSN (10 ký tự)