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 1MỤC LỤC
Trang 2LỜ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 3NHẬ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 4PHẦ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 5PHẦ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 7PHẦ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 8Nó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 9bí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 10PHẦ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 11Do 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 12Tươ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 18Hai 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 19Hà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 20keyExpanded[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: