1. Trang chủ
  2. » Luận Văn - Báo Cáo

đồ án Mã hóa luồng dữ liệu với thuậ t toán NKBK

21 422 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

Định dạng
Số trang 21
Dung lượng 479,92 KB

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

Nội dung

Trong bản báo cáo này, em xin đề xuất một loại mã hóa luồng dữ liệu có tên gọi là NKBK, một thuật toán mới về mật mã luồng.. Với chiều dài của thanh ghi ngắn, cùng với thuật toán thiết k

Trang 1

BÁO CÁO THỰC TẬP TỐT NGHIỆP

Đề tài : Mã hóa luồng dữ liệu với thuật toán NKBK Giáo viên hướng dẫn: TS Phạm Việt Thành Sinh viên thực hiện: Nguyễn Ngọc Khá

Số hiệu sinh viên: 20091428

Lớp: Điện Tử - Viễn Thông 10

Khóa: 54

Hà nội, Tháng 3/2014

Trang 2

Contents

Trang 3

Phần 1: Lời mở đầu

Ngày nay, cùng với sự phát triển mạnh về công nghệ thông tin, thì công việc bảo

vệ, bảo mật dữ liệu cũng là mối lo đáng quan tâm với ngành Việc bảo mật sẽ chống lại các cuộc tấn công từ bên ngoài vào, giúp thông tin muốn được lưu trữ hay gửi đi được an toàn hơn Với nhiều hình thức tấn công tinh vi, thì song song với chúng, chúng ta cũng cần phải có những biện pháp ngăn chặn lại tối ưu hơn Trong các công cụ để ngăn chặn những hành vi đó, thì việc mã hóa dữ liệu cũng là một giải pháp mà rất nhiều người ưa dùng

Mã hóa chia thành hai loại là mã hóa luồng và mã hóa khối Trong khi đó, nguyên tắc thiết kế và bảo mật của mật mã khối được hiểu khá rõ, thiết kế mật mã luồng vẫn còn đòi hỏi nhiều nghiên cứu Kể từ khi mật mã khối có thể chuyển đổi thành mật mã luồng bằng cách sử dụng OFB hoặc chế độ CFB đã có nhiều cuộc tranh luận liệu mật mã dòng có thực sự hữu ích không Những ý kiến chung đã chỉ ra rằng thuật toán mã hóa luồng vẫn còn nhiều hữu ích bởi hai lý do sau Thứ nhất, chúng có thể được thiết kế cho phép thực hiện nhanh hơn Thứ hai, chúng có thể được thiết kế nhỏ gọn hơn trong phần cứng Do đó, đối với một mật mã luồng muốn trở nên hiệu quả thì nó phải chạy rất nhanh trong phần mềm hoặc rất nhỏ trong phần cứng Các hoạt động mã hóa trong một mật mã luồng nhị phân rất đơn giản Dòng chính được XOR nhị phân với bản gốc để hình thành lên bản mã Tương tự như vậy, giải mã được thực hiện bằng cách dùng dòng chính XOR với bản mã để trở về bản gốc Điều quan trong nhất của một mật mã dòng là chống lại các cuộc tấn công khác nhau

Trong bản báo cáo này, em xin đề xuất một loại mã hóa luồng dữ liệu có tên gọi là NKBK, một thuật toán mới về mật mã luồng Thêm vào đó, với thuật toán đơn giản, thiết kế nhỏ gọn, độ an toàn mang đến cao, em tin rằng NKBK sẽ rất được ưa chuộng

Trang 4

Em xin gửi lời cảm ơn chân thành tới TS Phạm Việt Thành - Giảng viên viện Điện tử - Viễn thông, trường Đại học Bách Khoa Hà Nội đã tận tình hướng dẫn, giúp đỡ em trong quá trình thực tập vừa qua

Em xin chân thành cảm ơn!

Sinh viên thực hiện

Nguyễn Ngọc Khá

Trang 5

Phần 2: Nội dung

1. Sơ lược về đề tài

NKBK là một loại mã hóa luồng Với thuật toán đơn giản cùng với khả năng

xử lý dữ liệu tốt, quá trình thiết kế sẽ rất đơn giản, nhỏ gọn và sẽ mang lại hiệu quả cao Đối với phần cứng, NKBK hỗ trợ kích thước thanh ghi chính

là 80 bit Key và 64 bit IV và 80 bit Key ảo Với chiều dài của thanh ghi ngắn, cùng với thuật toán thiết kế đơn giản quá trình thiết kế phần cứng sẽ trở nên nhỏ gọn Ngoài ra khi phát triển phần mềm, NKBK sẽ tự động mở rộng kích thước thanh ghi tùy vào nhu cầu người sử dụng, độ dài thanh ghi càng cao thì độ an toàn càng tốt nhưng tốc độ xử lý càng chậm, và ngược lại,

độ dài thanh ghi càng ngắn thì độ an toàn càng thấp nhưng tốc độ xử lý càng cao

2. Thiết kế

Những quy định cụ thể chi tiết về thiết kế được trình bày như sau:

2.1. Thông số đầu vào và đầu ra

2.1.1. SecretKey (K), được gán với nhãn K(0) … K(ln-1) ( có nội dung

tương ứng với passwork người sử dụng nhập vào);

2.1.2. InitialValue (IV), có giá trị IV(0) … IV(m-1)( có nội dung tương

ứng với đoạn giá trị mà người lập trình cho trước);

Trong đó n và m lần lượt là chiều dài của 2 thanh ghi K và IV.Đầu ra của NKBK là giá trị Z ( giá trị để mã hóa với bản gốc để tạo thành bản mã hóa), thuật toán để tạo ra giá trị này sẽ được trình bày ở phần sau

2.2. Các thành phần trong bộ thiết kế Keystream

Bộ thiết kế có tổng cộng 5 thanh ghi, trong đó có 3 thanh ghi thực và

2 thanh ghi ảo

2.2.1. Thanh ghi thực

 Thanh ghi IV

Trang 6

Thanh ghi IV có nội dung và chiều dài bằng chính giá trị InitialValue mà người lập trình đưa vào trong chương trình, được gán nhãn IV(0), IV(1), … IV(m-1);

 Thanh ghi AThanh ghi A có nội dung và chiều dài là một nửa của SecretKey, chúng sẽ nhận thông tin từ các địa chỉ chẵn của thanh ghi Key ( K(0), K(2), K(4), …  A(0), A(1), A(2), … A(n-1) ), trong đó n = ln/2

 Thanh ghi BTương tự như thanh ghi A với nội dung là các địa chỉ lẻ của thanh ghi Key (K(1), K(3), K(5), …  B(0), B(1), B(2), … B(n-1), trong đó n = ln/2

Hình 1: Quá trình tạo ra 2 thanh ghi A và B từ thanh ghi K (SecretKey)

2.2.2. Thanh ghi ảo

 Thanh ghi A’

Thuật tuán tạo thanh ghi A’ từ thanh ghi A và thanh ghi IV:

For( i = 0; I <n; i++){

A’(i) = A(n-1) + IV(0);

A(0), A(1), , A(n-1) ← A(1), A(2), , A(n-1), A(0)}

 Thanh ghi B’

Quá trình tạo thanh ghi B’ cũng tương tự như tạo thanh ghi A’ :

For( i = 0; I <n; i++){

B’(i) = B(n-1) + IV(0);

Trang 7

B(0), B(1), , B(n-1)} ← {B(1), B(2), , B(n-1), B(0)

A’(0), A’(1), A’(2), , A’(n-1) ← A’(1), A’(2), A’(3), , A’(n-1), A’(0) ;

B’(0), B’(1), B’(2), , B’(n-1) ← B’(1), B’(2), B’(3), , B’(n-1), B’(0) ;

IV(0), IV(1), IV(2), , IV(m-1)} ← {IV(1), IV(2), IV(3), , IV(n-1), IV(0) ;

Trang 8

Hình 3: Quá trình tạo Z khi IV(0) =0.

2.3.2. If IV(0)=1

Then

Z = A(0) + B’(0) B(0) +A’(0) ;Z’ = A(n/2 – 1) B(n/2 -1) + A’(n/2 – 1) B’(n/2 - 1) ;For( i = 0; i < n; i++) A’(i) = A’(i) + Z’; B’(i) = B’(i) +Z’;

A(0), A(1), A(2), , A(n-1) ← A(1), A(2), A(3), , A(n-1), A(0);

B(0), B(1), B(2), , B(n-1) ← B(1), B(2), B(3), , B(n-1), B(0) ;

IV(0), IV(1), IV(2), , IV(m-1) ← !IV(0), !IV(1), !IV(2), !IV(3), , !IV(m-2), !IV(m-1) ;

Trang 9

Hình 4: Quá trình tạo Z khi IV(0) =1.

Trang 10

Quá trình mã hóa dữ liệu là quá trình thực hiện phép toán Xor giữa file bản gốc với dòng khóa Keystream mà thuật toán mã hóa luồng tạo ra Các trình tự mã hóa sẽ được mô tả ở hình dưới sau đây:

Hình 6: Quá trình mã hóa 1 file dữ liệu

Đầu vào của chương trình là 1 file cần mã hóa và 2 giá trị InitialValue và SecretKey để tạo khóa luồng Điều cần lưu ý ở đây là quá trình mã hóa dựa trên phép toán Xor giữa các bit dữ liệu, chính vì thế mà khi mã hóa tất cả phải được đổi sang dạng nhị phân Dưới đây là một ví dụ về sự mã hóa với 1 flie ảnh bitmap

Trang 11

Hình 7: Quá trình mã hóa 1 file ảnh.

Trang 12

3.2. Giải mã

Quá trình giải mã là bước sau của quá trình mã hóa, sau khi một file nào đó

đã mã hóa thành công, chúng ta thu về một mảng nhị phân mã hóa và công việc giải mã sẽ bắt đầu từ đây

Cũng vẫn là phép toán Xor, chúng ta lấy mảng nhị phân đã mã hóa tương tác với dòng khóa Keystream, kết quả là sẽ cho ta về một mảng nhị phân có giá trị bằng đúng mảng nhị phân của file gốc khi chưa bị mã hóa Quá trình thực hiện được mô tả ở hình dưới sau:

Hình 8: Quá trình giải mã

5

Trang 13

4.1. Phần mềm

NKBK rất hiệu quả cho phát triển phần mềm Điểm nổi bật nhất ở NKBK là thuật toán thiết kế đơn giản, tốc độ xử lý cao và khả năng bảo mật rất tốt khi được phát triển trên phần mềm Người lập trình sẽ không gặp nhiều khó khăn khi tiếp cận NKBK

Với độ rộng thanh ghi được mở rộng một cách tùy biến, tùy thuộc vào giá trị, độ dài ít hay nhiều khi người sử dụng đăng nhập 2 giá trị

InitializationVariable và SecretKey, ta có thể hiểu được chiều dài càng lớn thì khả năng xử lý mã hóa càng tốt, thuật toán xử lý càng nhiều và tiêu tốn thời gian, chiều dài thanh ghi càng nhỏ thì khả năng xử lý mã hóa càng thấp, thuật toán xử lý ít và tiêu tốn ít thời gian

Hình 5: Kết quả sau khi mã hóa 1 file ảnh với độ dài các key khác nhau.

Ngoài NKBK, cũng còn rất nhiều loại cùng họ mã hóa luồng, chúng ta có thể kể đến như Trivium, Grain128 hay Mickey Điểm khác biệt giữa chúng

là thuật toán để tạo ra dòng Keystream, chính từ sự khác nhau đó dẫn đến khả năng xử lý mã hóa của chúng cũng khác nhau Sau đây là bảng so sánh giữa 4 loại trên khi đang xử lý 1 file ảnh bitmap có độ dài là 248624 bit

Bảng thống kê số bit bị thay đổi so với bản gốc

Tên chương trình Số bit bị thay đổi Phần trăm

Trang 14

Bảng thống kê thời gian mã hóa trên PC với Chip Intel® Core ™2 Duo

4.2. Phần cứng

Trong việc phát triển phần cứng, NKBK sẽ tối thiểu hóa độ dài thanh ghi lại

để tiết kiệm các chi tiết đầu vào, giúp cho việc thiết kế chip trở nên nhỏ gọn hơn, tiêu thụ ít năng lượng hơn

Cụ thể ở đây, thuật toán sẽ lấy 80 bit Key và 64 bit IV tương ứng với độ dài thanh ghi A và B là 40 bit, 2 thanh ghi ảo cũng là 40 bit Vậy khi xử lý, thuật toán sẽ tổng sử dụng đến 160 bit A, B, A’, B’ và 64 bit IV Dưới đây là bảng thống kê tổng số lượng thanh ghi của từng loại mã hóa luồng khi phát triển phần cứng

Bảng thống kê tổng độ dài thanh ghi của một số loại khóa luồng

Trang 16

Sau khi chọn ảnh xong, chương trình sẽ tự động đọc file ảnh đó và tạo

ra một mảng nhị phân có chứa thông tin về bức ảnh đó

• Nhập Passwork:

Trang 17

thường người sử dụng sẽ nhập passwork bằng những ký tự, chính vì vậy mà ở chức năng này, chúng sẽ tự gọi hàm Convert từ ký tự đó sang mảng nhị phân rồi gán vào SecretKey Initial Value cũng được gán giá trị từ chức năng này, trước đó người lập trình đã nhập 1 đoạn

ký tự về giá trị Initial Value trong chương trình, đến bước này chỉ việc gọi hàm Convert và thực hiện phép gán nhị phân vào Initial Value

• Mã hóa:

Chức năng mã hóa là một trong những chức năng chủ đạo của chương trình Chúng thực hiện việc gọi hàm Keystream, thực hiện phép toán Xor giữa Keystream với mảng nhị phân của file gốc

• Lưu ảnh mã hóa:

Sau khi mã hóa thành công, bước tiếp theo là xuất ra 1 file ảnh mã hóa Mảng nhị phân sau khi mã hóa sẽ được convert sang mảng byte rồi sau đó từ mảng byte đưa ra một dạng bitmap và xuất ra ảnh

• Hàm tạo khóa:

Như đã thấy ở trong chương trình có 4 loại khóa tương đương với 4 hàm để tạo ra những khóa đó

 Hàm keyTrivium ( Hàm tạo khóa Trivium)

 Hàm keyNKBK ( Hàm tạo khóa NKBK)Hàm keyGrain128 ( Hàm tạo khóa Grain128)

Trang 18

Initial Value: 01001110011001110110111101100011010010110110100001Secret Key: 01100001011011000110010001101010011011100110010001Keystream: 010101011000011000101001110100101010010101011110110

Initial Value:0110111001100111011000100111001101110110011000

Secret Key: 01100110011000100111001101100011011000010110010Keystream: 110111110100001101110100010111000001111000111001

Initial Value: 01101110011001110011001101100100011101100110011Secret Key: 001100010111011000110100001100110110001101110011Keystream: 00111101111100111011000111001101010110001101111

Keystream: 11010100111001101001010000110001111001110010011

Chú thích: Initial Value, SecretKey là hai giá trị đầu vào, còn Keystream là đầu ra của khóa luồng.

Trang 19

Ảnh gốc

Ảnh sau mã hóa

Trang 20

Phần 3: Kết luận

NKBK là một mật mã luồng mà có thể phát triển được trên nền tảng cả phần cứng

và phần mềm Thuật toán đơn giản, giúp người lập trình dễ tiếp cận được vấn đề và lập trình ra nó, ngoài ra, tốc độ xử lý của NKBK là rất cao, nên việc ứng dụng vào phần mềm sẽ không quá khó khăn Còn về phần cứng, NKBK đã tối thiểu một phần độ dài của các thanh ghi, giúp cho việc thiết kế trở nên nhỏ gọn, thuận tiện hơn

Quá trình nghiên cứu NKBK vẫn đang trong giai đoạn phát triển, tuy đã đạt được kết quả khả quan nhưng sẽ vẫn còn một số hạn chế,cần khắc phục trong thời gian sắp tới Do đó Em rất mong nhận được ý kiến đóng góp quý báu từ các thầy cô để

em có thể hoàn thiện đề tài của mình trong tương lai

Em xin chân thành cảm ơn!

Trang 21

Tài liệu tham khảo

ECRYPT, “eSTREAM: ECRYPT Stream Cipher Project, IST-2002-507932,” Available at http://www.ecrypt.eu.org/stream/

Học lập trình C#: http://www.youtube.com/watch?

v=5Xeiy1TdBQQ&list=PLA22806302AD434C6

Ngày đăng: 13/09/2014, 21:20

HÌNH ẢNH LIÊN QUAN

Hình 1: Quá trình tạo ra 2 thanh ghi A và B từ thanh ghi K (SecretKey) - đồ án Mã hóa luồng dữ liệu với thuậ t toán NKBK
Hình 1 Quá trình tạo ra 2 thanh ghi A và B từ thanh ghi K (SecretKey) (Trang 6)
Hình 2: Quá trình tạo ra 2 thanh ghi ảo A’ và B’ - đồ án Mã hóa luồng dữ liệu với thuậ t toán NKBK
Hình 2 Quá trình tạo ra 2 thanh ghi ảo A’ và B’ (Trang 7)
Hình 3: Quá trình tạo Z khi IV(0) =0. - đồ án Mã hóa luồng dữ liệu với thuậ t toán NKBK
Hình 3 Quá trình tạo Z khi IV(0) =0 (Trang 8)
Hình 4: Quá trình tạo Z khi IV(0) =1. - đồ án Mã hóa luồng dữ liệu với thuậ t toán NKBK
Hình 4 Quá trình tạo Z khi IV(0) =1 (Trang 9)
Hình 6: Quá trình mã hóa 1 file dữ liệu - đồ án Mã hóa luồng dữ liệu với thuậ t toán NKBK
Hình 6 Quá trình mã hóa 1 file dữ liệu (Trang 10)
Hình 7: Quá trình mã hóa 1 file ảnh. - đồ án Mã hóa luồng dữ liệu với thuậ t toán NKBK
Hình 7 Quá trình mã hóa 1 file ảnh (Trang 11)
Hình 8: Quá trình giải mã - đồ án Mã hóa luồng dữ liệu với thuậ t toán NKBK
Hình 8 Quá trình giải mã (Trang 12)
Hình 5: Kết quả sau khi mã hóa 1 file ảnh với độ dài các key khác nhau. - đồ án Mã hóa luồng dữ liệu với thuậ t toán NKBK
Hình 5 Kết quả sau khi mã hóa 1 file ảnh với độ dài các key khác nhau (Trang 13)
Bảng thống kê tổng độ dài thanh ghi của một số loại khóa luồng - đồ án Mã hóa luồng dữ liệu với thuậ t toán NKBK
Bảng th ống kê tổng độ dài thanh ghi của một số loại khóa luồng (Trang 14)
Bảng thống kê thời gian mã hóa trên PC với Chip Intel® Core ™2 Duo - đồ án Mã hóa luồng dữ liệu với thuậ t toán NKBK
Bảng th ống kê thời gian mã hóa trên PC với Chip Intel® Core ™2 Duo (Trang 14)
Hình 9: Cửa sổ giao diện phần mềm. - đồ án Mã hóa luồng dữ liệu với thuậ t toán NKBK
Hình 9 Cửa sổ giao diện phần mềm (Trang 16)

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w