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

Tiểu luận LẬP TRÌNH SYMBOLIC CẤU TRÚC CỦA HỆ THỐNG MÃ HÓA AES

24 671 2

Đ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 24
Dung lượng 394,6 KB

Nội dung

Bài thu hoạch tập trung vào ứng dụng phần mềm toán học Maple – là phần mềm tính toán kỹ thuật cho các nhà toán học, kỹ sư và nhà khoa học, đặc biệt phần mềm hỗ trợ thêm các chức năng lập

Trang 1

MỤC LỤC

Trang 2

LỜI CẢM ƠN

Đầu tiên em xin gởi lời cảm ơn chân thành đến thầy Đỗ Văn Nhơn – Giảng viên cao học trường đại học Công nghệ thông tin tp Hồ Chí Minh đã tận tình giảng dạy, hướng dẫn em trong suốt môn học.

Em xin chân thành cám ơn quý Thầy Cô trong khoa Khoa học máy tính, phòng đào tạo sau đại học, trường đại học Công nghệ thông tin – đại học Quốc gia Tp Hồ Chí Minh đã tận tình giảng dạy, hướng dẫn, giúp đỡ và tạo điều kiện cho em thực hiện tiểu luận này.

Mặc dù rất cố gắng, song tiểu luận vẫn còn nhiều thiếu sót Em mong nhận được nhiều

sự thông cảm và góp ý của thầy để em có thể hoàn thiện khả năng của em hơn nữa Xin chân thành gửi lời cám ơn sâu sắc đến quý thầy

Xin chân thành cảm ơn!

Trang 3

NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG

DẪN

Ngày……Tháng……Năm……

Giáo viên hướng dẫn

Trang 4

PHẦN I - TỔNG QUAN

Lĩnh vực bảo mật nói chung cũng như lĩnh vực mã hóa nói riêng hiện nay là một lĩnh vực quan trọng trong sự phát triển của công nghệ máy tính Bởi vì càng nhiều công nghệ xuất hiện, càng nhiều mối quan hệ đối tác, làm ăn, giao dịch được thiết lập

từ xa, càng nhiều dữ liệu được đưa vào lưu trữ trên máy tính và đưa ra sử dụng trên các mạng công cộng thì mức độ bảo mật càng được yêu cầu cao hơn

Bài thu hoạch tập trung vào ứng dụng phần mềm toán học Maple – là phần mềm tính toán kỹ thuật cho các nhà toán học, kỹ sư và nhà khoa học, đặc biệt phần mềm hỗ trợ thêm các chức năng lập trình logic rất mạnh, rất phù hợp với một số bài toán đặt ra hiện nay

Bài thu hoạch này đề cập đến thuật toán AES, là một thuật toán đã ra đời hơn 10 năm trước nhưng cho đến nay vẫn được công nhận là một thuật toán an toàn, được sử dụng trong nghành ngân hàng và chính phủ Mỹ, được công nhận bởi cục tiêu chuẩn Hoa Kỳ NIST về việc bảo vệ tài liệu mật (AES 128 bit) và tài liệu tuyệt mật (AES 192 bit và AES 256 bit)

Trong bài thu hoạch này, em tập trung vào nghiên cứu thuật toán AES và tìm cách cài đặt thuật toán bằng ngôn ngữ của maple Có thể cách cài đặt này chưa phải là tốt nhất do có thể đã có các thư viện hoặc sử dụng bằng ngôn ngữ lập trình thuần túy

sẽ tốt hơn Tuy nhiên hi vọng qua bài thu hoạch này sẽ giúp em phần nào hiểu rõ được thêm cách sử dụng của phần mềm

Do phần mềm maple đã quá thông dụng, việc nói lại những cách sử dụng cơ bản của phần mềm là không cần thiết và cũng bởi các cấu trúc, cú pháp để lập trình trong phần mềm rất đa dạng và phức tạp đồng thời cũng đã có sẵn rất nhiều hướng dẫn sử dụng rất đơn giản Do đó trong bài thu hoạch em chỉ giới thiệu sơ lược về thuật toán maple, phần còn lại nói về thuật toán AES và cách cài đặt

Trang 5

PHẦN I - PHẦN MỀM MAPLE

1 Phần mềm Maple

Maple là một gói phần mềm toán học thương mại phục vụ cho nhiều mục đích

Nó phát triển lần đầu tiên vào năm 1980 bởi Nhóm Tính toán Hình thức tại Đại học Waterloo ở Waterloo, Ontario, Canada

Từ năm 1988, nó đã được phát triển và thương mại hóa bởi Waterloo Maple Inc (còn được biết đến với tên gọi Maplesoft), một công ty Canada cũng có trụ sở tại Waterloo, Ontario Phiên bản hiện tại là Maple 13 được phát hành vào tháng 5 năm

2009 Đối thủ cạnh tranh chính của nó là Mathematica

Người dùng có thể nhập biểu thức toán học theo các ký hiệu toán học truyền thống Có thể dễ dàng tạo ra những giao diện người dùng tùy chọn Maple hỗ trợ cho

cả tính toán số và tính toán hình thức, cũng như hiển thị Nhiều phép tính số học được thực hiện dựa trên thư viện số học NAG; trong Maple, các chương trình con NAG đã được mở rộng để cho phép độ chính xác ngẫu nhiên lớn Các ví dụ về tính toán hình thức sẽ được trình bày trong phần sau

Maple cũng có một ngôn ngữ lập trình cấp cao đầy đủ Cũng có giao diện cho những ngôn ngữ khác (C, Fortran, Java, MatLab, và Visual Basic) Cũng có một giao diện dành cho Excel

Phần lớn chức năng toán học của Maple được viết bằng ngôn ngữ Maple, và được thông dịch bởi nhân Maple Nhân Maple được viết bằng C Maple chạy trên tất

cả các hệ điều hành chính

Ngôn ngữ lập trình Maple là một ngôn ngữ kiểu động Cũng giống như các hệ thống đại số máy tính, các biểu thức hình thức được lưu trữ trong bộ nhớ theo đồ thị không chu trình có hướng (DAG) Ngôn ngữ cho phép các biến có phạm vi nhất định (lexical scoping) Ngôn ngữ có hình thức lập trình hàm, nhưng cũng có hỗ trợ đầy đủ cho lập trình truyền thống, theo kiểu mệnh lệnh

Tên "Maple" không phải là tên viết tắt hoặc từ cấu tạo bằng chữ đầu, mà chỉ đơn giản là để chỉ hình tượng Lá phong (tiếng Anh: maple) trên Quốc kỳ Canada

2 Một số tính năng vượt trội của maple

Thông qua thực tiễn sử dụng, cộng đồng người dùng maple đã chỉ ra những ưu điểm vượt trội của maple so với những phần mềm tương tự (Mathematica, Geogebra 4…) như sau (ưu điểm tập hợp trên bản maple 15):

- Là một phần mềm toán học cao cấp, có thể giải quyết một số vấn đề của Toán học

- Rất nhiều chức năng và được cập nhật liên tục, mỗi phiên bản đều có những cái mới của nó và nhà sản xuất không ngừng phát triển khả năng tính toán của nó

- Hoạt động mạnh mẽ trên nền java

- Tính toán nhanh, chính xác với những số lên tới 20.00.000 chữ số

- Hiển thị như sách giáo khoa (trực quan, dễ hiểu cho người dùng không chuyên)

Trang 6

- Có thể vẽ đồ thị, tính toán ngay cả trên đồ thị.

- Vẽ được đồ thị 3D, xoay hình, kiểm tra dễ dàng

- Giải phương trình, Hệ phương trình nhanh chóng, gần chính xác

- Phân tích thành nhân tử, biến đổi biểu thức, rút gọn nhanh chóng, khai triển, tính thương, dư của đa thức,

- Kiểm tra số nguyên tố

- Tìm chữ số thứ n

- Kiểm tra số có bao nhiêu chữ số

- Phân tích một số nguyên ra thừa số nguyên tố

- Tính toán với số phức

- Tính tổng nhanh chóng, thuận tiện, nhất là khi cần tính công thức tổng quát của một biểu thức

- Các tính năng khác như lập trình, tạo file trình chiếu, mô hình vật lý…

- Hỗ trợ nhiều ngôn ngữ khác nhau Đến phiên bản Maple 16 có sẵn tiếng Anh và Nhật Bản, với phần mở rộng gói ngôn ngữ hỗ trợ tiếng Bồ Đào Nha Pháp, Trung Quốc, Tây Ban Nha, Hàn Quốc, Hy Lạp, Hungary và Brazil

Trang 7

PHẦN II - HỆ THỐNG MÃ HÓA AES

1 Mã hóa khối

Thuật toán mã hóa AES là một hệ thống mã hóa chung chia ra làm nhiều thuật toán mã hóa con khác nhau như AES 128 bit, AES 192 bit… tùy vào độ lớn của khóa, khi độ lớn của khóa thay đổi thuật toán cũng có một số thay đổi nhất định nhưng không ảnh hưởng nhiều đến cấu trúc của thuật toán

Thuật toán mã hóa AES lại là một nhánh của lĩnh vực mã hóa khối – lĩnh vực mà các khóa và các dữ liệu đầu vào được để dưới dạng khối dữ liệu thường gọi là block mỗi phần tử của khối thường là một byte hoặc một số tùy theo yêu cầu của bài toán và tính chất của thuật toán

Lĩnh vực mã hóa khối lại là một nhánh của thuật toán mã hóa đối dạng thuật toán mã hóa sử dụng một khóa bí mật duy nhất dùng cho cả hai bước

xứng-mã hóa và giải xứng-mã - khác với thuật toán xứng-mã hóa bất đối xứng dùng hai khóa có liên hệ chặt chẽ với nhau để mã hóa và giải mã, khóa để mã hóa không cần giữ

bí mật.

Đơn giản hơn ta có thể xem xét sơ đồ sau:

Trang 8

Nói rõ hơn, mã hóa khối là những thuật toán mã hóa đối xứng hoạt động

trên những khối thông tin có độ dài xác định (block) với những chuyển đổi xác

định Chẳng hạn một thuật toán mã hóa khối có thể xử lý khối 128 bít đầu vào

và biến nó thành khối 128 bít ở đầu ra Quá trình chuyển đổi còn sử dụng thêm một tham số nữa: khóa bí mật để cá biệt hóa quá trình Việc giải mã cũng diễn ra tương tự: xử lý khối mã hóa 128 bít cùng với khóa để trả về khối 128 bít bản rõ ban đầu.

Để mã hóa những văn bản có độ dài vượt quá độ dài của khối, người ta sử dụng thuật toán theo một chế độ mã hóa khối nào đó.

Phân biệt với mã hóa khối là mã hóa dòng Mã hóa dòng làm việc trên từng

Trang 9

bít của dòng dữ liệu và quá trình biến đổi thay đổi theo quá trình mã hóa Tuy nhiên, sự phân biệt giữa 2 phương pháp nhiều khi không rõ ràng vì mã hóa khối khi hoạt động theo một chế độ nào đó thì có tác dụng như một phương pháp mã hóa dòng.

Thuật toán mã hóa khối ra đời sớm và có nhiều ảnh hưởng là thuật toán DES (Data Encryption Standard - Tiêu chuẩn mã hóa dữ liệu) do công ty IBM phát triển và được ban hành làm tiêu chuẩn năm 1977 Tiêu chuẩn thay thế DES có tên là AES (Advanced Encryption Standard - Tiêu chuẩn mã hóa nâng cao) được ban hành năm 2001

2 Thuật toán mã hóa AES

AES(viết tắt của từ tiếng Anh:Advanced Encryption Standard, hayTiêu chuẩn

mã hóa tiên tiến) là mộtthuật toánmã hóa khốiđượcchính phủ Hoa kỳáp dụng làm tiêu chuẩn

mã hóa Giống như tiêu chuẩn tiền nhiệmDES, AES được kỳ vọng áp dụng trên phạm

vi thế giới và đã được nghiên cứu rất kỹ lưỡng AES được chấp thuận làm tiêu chuẩn liên bang bởiViện tiêu chuẩn và công nghệ quốc gia Hoa kỳ(NIST) sau một quá trình tiêu chuẩn hóa kéo dài 5 năm

Thuật toán được thiết kế bởi hai nhà mật mã học ngườiBỉ: Joan DaemenvàVincent Rijmen Thuật toán được đặt tên là "Rijndael" khi tham gia cuộc thi thiết kế AES Rijndael được phát âm là "Rhine dahl" theo phiên âm quốc tế

Thuật toán được dựa trên bản thiết kếSquarecó trước đó của Daemen và Rijmen; còn Square lại được thiết kế dựa trênShark.

Khác với vớiDESsử dụngmạng Feistel, Rijndael sử dụng mạng thay thế-hoán vị AES có thể dễ dàng thực hiện với tốc độ cao bằngphần mềmhoặcphần cứngvà không đòi hỏi nhiềubộ nhớ Do AES là một tiêu chuẩn mã hóa mới, nó đang được triển khai sử dụng đại trà

Trang 10

PHẦN III - CẤU TRÚC CỦA HỆ THỐNG MÃ HÓA AES

Một hệ thống mã hóa AES sẽ bao gồm các 4 thành phần chính ứng với bốn bước biến đổi khác nhau Bước mã hóa và giải mã cũng đều có các thành phần như nhau, và

có thứ tự biến đổi trái ngược với nhau Trong phần này ta đề cập đến chủ yếu là quá trình mã hóa, các lưu ý về quá trình giải mã sẽ được đề cập đến trong trong mục tương ứng nếu có những lưu ý đặc biệt

Hệ thống mã hóa AES hiện nay được chia ra thàng 3 cách hiện thực chính dựa trên số bit của khóa:

- AES-128: sử dụng khóa có độ dài 128 bit

- AES-192: sử dụng khóa có độ dài 192 bit

- AES-256: sử dụng khóa có độ dài 256 bit

1 Hàm subbytes

1.1 S-Box

Trong ngành mã hóa, S-Box là một thành phần thuộc nhánh mã hóa đối xứng S-Box được dùng để thay thế, biến đổi dữ liệu cần mã hóa cho khác đi với bản gốc Trong mã hóa khối, S-Box được ứng dụng để làm giảm các mối quan

hệ giữa khóa (key) và dữ liệu cần mã hóa.

Thông thường, S-Box nhận vào một lượng n bit input và trả về một lượng

m bit output với m có thể không bằng n Phương pháp biến đổi dựa vào một bảng tra cứu gồm nhiều hàng, cột Bảng tra cứu thông thường được sử dụng bảng cố định, không thay đổi Tuy nhiên có một vài thuật toán sẽ tự động tạo ra S-Box dựa trên khóa để thay đổi với mỗi khóa khác nhau.

Hiện nay vẫn còn nhiều nhóm đang nghiên cứu làm cách nào để tạo ra một S-Box tốt để có thể che dấu dữ liệu trước khi mã hóa.

1.2 Bước SubBytes

Các byte được thế thông qua bảng tra S-box S-box này đa số được thiết kế cố định cho thuật toán chỉ để trộn lẫn dữ liệu đầu vào với nhau đồng thời giúp ngăn ngừa những dữ liệu vô tình không bị thay đổi khi mã hóa Để cho dễ hiểu, ta có thể xem một bảng S-box đơn giản theo ví dụ dưới đây:

Trang 11

Do dữ liệu ví dụ của ta dùng block 256 bit (16 * 16) nên bảng giá trị này ta sẽ đổi sang số thập lục phân (hex) cho dễ theo dõi.

Nếu ta quy định mỗi mảnh dữ liệu trong khối là 1 byte thì ta có thể áp dụng cách tra bảng theo cách dùng 4 bit đầu của byte làm số hàng, 4 bit sau làm số cột để thay thế Trong lập trình ta chỉ đơn giản dùng vài phép dịch bit hoặc phép đồng dư module

để tính toán rất nhanh Tuy nhiên trong ví dụ nếu ta dùng cách tính toán như trên máy tính sẽ hơi khó suy luận để cho đơn giản, ta sẽ chuyển hết các bit về số thập lục phân cho tiện theo dõi bởi vì trùng hợp là nếu ta chuyển các giá trị byte về số thập lục phân thì 4 bit đầu sẽ được thể hiện qua số hàng đơn vị, 4 bit sau sẽ được thể hiện qua số hàng chục, riêng lẻ nhau rất thuận tiện cho việc tra cứu

Theo như bảng ví dụ, nếu dữ liệu đầu vào của ta là 1 byte khi đổi sang hệ thập lục phân thành 9b, ta sẽ tra vào hàng số 9, cột b trong bảng để lấy giá trị thay thế cho byte này là 14 Tương tự nếu byte đầu vào có giá trị 255, chuyển sang hệ thập lục phân

là ff thì ta sẽ thay thế byte đó bằng 16

Trong bước giải mã, ta có thể dùng cách tra ngược lại bảng giá trị để giải mã Tuy nhiên cách này phải duyệt lại toàn bộ S-box, rất tốn thời gian và bộ nhớ Do đó để cải thiện thuật toán, chúng ta sẽ xây dựng một S-box để tra ngược tạm gọi là inverse S-box Inverse S-box cho S-box trên sẽ như sau:

Trang 12

Tương tự như khi mã hóa, khi giải mã ta cũng sẽ dùng 4 bit đầu làm giá trị hàng,

4 bit sau làm giá trị cột để thay thế

Trong ví dụ ta cũng chuyển đổi giá trị cần giải mã về số thập lục phân rồi tra trong bảng Ví dụ nếu ta có byte có giá trị là 16 thì ta sẽ chuyển đổi giá trị của byte này thành ff

Trong bài thu hoạch, ta dung SBox và InvSBox được khai báo trong maple như sau, để tiện việc tra cứu ta dung một SBox gồm một giá trị đầu vào và một giá trị đầu

ra để việc tra cứu tìm kết quả được nhanh chóng:

Trang 16

.

Trang 17

- Hàng thứ 2 có số thứ tự là 1 sẽ bị dịch sang phải 1 byte Byte cuối hàng sẽ được đưa vào vị trí đầu hàng.

- Tương tự cho các hàng còn lại

Do vậy, mỗi cột khối đầu ra của bước này sẽ bao gồm các byte ở đủ cột và hàng như khối đầu vào Đối với các cách cài đặt với độ lớn khối khác nhau thì số vị trí dịch chuyển cũng khác nhau

Ta sẽ khai báo bước này trong phần mềm như sau:

Cách thường được áp dụng là nhân cột cần biến đổi với một ma trận khác để có

Trang 18

Hai bước ShiftRows và MixColumns đã tạo ra tính chất khuyếch tán cho thuật toán Các giá trị của khối được trộn lẫn vào nhau và cho ra khối mã hóa, đảm báo tính toàn vẹn và liên kết chặt chẽ trong dữ liệu, giảm thiểu khả năng bị tấn công theo hướng phán đoán theo ngữ nghĩa.

Hàm MixColumns cơ bản sẽ được khai báo như sau:

MixColumns := proc(byteMatrix)

local product1, polyMatrix:

polyMatrix := map(bitToPoly, byteMatrix):

local product1, polyMatrix:

polyMatrix := map(bitToPoly, byteMatrix):

Trang 19

Hàm addRoundKey được khai báo cơ bản như sau:

AddRoundKey := proc(byteMatrix, expandedKey, roundNum)

4.1 Thuật toán sinh khóa

Thuật toán sinh khóa nhận vào một khóa K và thực hiện sinh khóa để sinh

ra một dãy các khóa phục vụ cho việc mã hóa Thủ tục này đảm bảo sẽ sinh ra số lượng khóa con khác nhau hoàn toàn vừa đủ để thực hiện số vòng mã hóa theo yêu cầu đủ để thực hiện quá trình mã hóa.

Mã cơ bản của thuật toán sinh khóa trong phần mềm:

Trang 20

keyExpanded[2,4*i+1] :=

xor8(keyExpanded[2,4*i-3],SBoxTable[keyExpanded[3,4*i]]); keyExpanded[3,4*i+1] :=

xor8(keyExpanded[3,4*i-3],SBoxTable[keyExpanded[4,4*i]]); keyExpanded[4,4*i+1] :=

xor8(keyExpanded[4,4*i-3],SBoxTable[keyExpanded[1,4*i]]); keyExpanded[1,4*i+1] := xor8(keyExpanded[1,4*i+1],fudgeWord); for j from 2 to 4 do

for k from 1 to 4 do

keyExpanded[k,4*i+j]

:=xor8(keyExpanded[k,4*i+j-4],keyExpanded[k,4*i+j-1]): end do:

end do:

end do:

keyExpanded;

end:

5 Thuật toán mã hóa

Sau khi có đủ các thành phần của thuật toán mã hóa Ta kết nối các thành phần lại với nhau để cho ra 1 thuật toán mã hóa hoàn chỉnh Các thuật toán mã hóa AES-128, AES-192, AES-256 có cách cài đặt khác nhau đôi chút Điểm có thể thấy rõ nhất là số vòng lặp mã hóa của mỗi thuật toán khác nhau cụ thể như sau:

Ngày đăng: 10/04/2015, 00:50

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w