- vừa được xem lúc

Tìm hiểu thuật toán mã hóa khóa đối xứng AES

0 0 83

Người đăng: Bui Quy Hoat

Theo Viblo Asia

I. Giới thiệu chung .

1. Tổng quan.

  • AES (viết tắt của từ tiếng anh: Advanced Encryption Standard, hay Tiêu chuẩn mã hóa nâng cao) là một thuật toán mã hóa khối được chính phủ Hoa Kỳ áp dụng làm tiêu chuẩn mã hóa.
  • Thuật toán được xây dựng dựa trên Rijndael Cipher phát triển bởi 2 nhà mật mã học người Bỉ: Joan Daemen và Vincent Rijmen.
  • AES làm việc với các khối dữ liệu 128bit và độ dài khóa 128bit, 192bit hoặc 256bit. Các khóa mở rộng sử dụng trong chu trình được tạo ra bởi thủ tục sinh khóa Rijndael.
  • Hầu hết các phép toán trong thuật toán AES đều thực hiện trong một trường hữu hạn của các byte. Mỗi khối dữ liệu đầu vào 128bit được chia thành 16byte, có thể xếp thành 4 cột, mỗi cột 4 phần tử hay một ma trận 4x4 của các byte, nó gọi là ma trận trạng thái.
  • Tùy thuộc vào độ dài của khóa khi sử dụng 128bit, 192bit hay 256bit mà thuật toán được thực hiện với số lần lặp khác nhau.

2. Các bước xử lý chính.

  • Quá trình mở rộng khóa sử dụng thủ tục sinh khóa Rijndael.
  • Quá trình mã hóa.

II. Xây dựng thuật toán.

1. Xây dựng bảng S-box.

a. Bảng S – box thuận.

  • Bảng S-box thuận được sinh ra bằng việc xác định nghịch đảo cho một giá trị nhất định trên GF(28) = GF(2)[x] / (x8+x4+x3+x+1) (trường hữu hạn Rijindael). Giá trị 0 không có nghịch đảo thì được ánh xạ với 0. Những nghịch đảo được chuyển đổi thông qua phép biến đổi affine.
  • Công thức tính các giá trị bảng S-box và bảng S- box tương ứng:

b. Bảng S-box nghịch đảo.

  • S-box nghịch đảo chỉ đơn giản là S-box chạy ngược. Nó được tính bằng phép biến đổi affine nghịch đảo các giá trị đầu vào. Phép biến đổi affine nghịch đảo được biểu diễn như sau:

2. Giải thuật sinh khóa phụ.

Quá trình sinh khóa gồm 4 bước:

  • Rotword: quay trái 8 bít
  • SubBytes
  • Rcon: tính giá trị Rcon(i) Trong đó :
    Rcon(i) = x(i-1) mod (x8 + x4 + x3 + x + 1).
    
  • ShiftRow

3. Quá trình mã hóa.

a. Sơ đồ tổng quát.

b. Hàm AddRoundKey.

  • Được áp dụng từ vòng lặp thứ 1 tới vòng lặp Nr
  • Trong biến đổi Addroundkey(), một khóa vòng được cộng với state bằng một phép XOR theo từng bit đơn giản.
  • Mỗi khóa vòng gồm có 4 từ (128 bit) được lấy từ lịch trình khóa. 4 từ đó được cộng vào mỗi cột của state, sao cho:
    [S’0,c, S’1,c, S’2,c, S’3,c ] = [S0,c, S1,c, S2,c, S3,c ]  [W(4*i + c)] với 0 <= c < 4. 

c. Hàm SubBytes.

  • Biến đổi SubBytes() thay thế mỗi byte riêng rẽ của state Sr,c bằng một giá trị mới S’ r,c sử dụng bảng thay thế (S - box) được xây dựng ở trên.

d. Hàm ShiftRow.

  • Trong biến đổi ShiftRows(), các byte trong ba hàng cuối cùng của trạng thái được dịch vòng đi các số byte khác nhau (độ lệch). Cụ thể :
    S’r,c = Sr,(c + shift ( r, Nb)) mod Nb (Nb = 4)
    
  • Trong đó giá trị dịch shift (r, Nb) phụ thuộc vào số hàng r như sau:
    Shift(1,4) = 1, shift(2,4) = 2, shift(3,4) = 3.
    
  • Hàng đầu tiên không bị dịch, ba hàng còn lại bị dịch tương ứng:
    • Hàng thứ 1 giữ nguyên.
    • Hàng thứ 2 dịch vòng trái 1 lần.
    • Hàng thứ 3 dịch vòng trái 2 lần.
    • Hàng thứ 4 dịch vòng trái 3 lần.

e. Hàm MixColumns.

  • Biến đổi MixColumns() tính toán trên từng cột của state. Các cột được coi như là đa thức trong trường GF(28) và nhân với một đa thức a(x) với:
    a(x) = (03)x^3 +(01)x^2 +(01)x + (02)
    
  • Biến đổi này có thể được trình bày như phép nhân một ma trận, mà mỗi byte được hiểu như là một phần tử trong trường GF(28): s’(x) = a(x)  s(x):
  • Mô tả bằng ma trận như sau :

III. Quá trình giải mã.

1. Tổng quan.

Thuật toán giải mã khá giống với thuật toán mã hóa về mặt cấu trúc nhưng 4 hàm sử dụng là 4 hàm ngược của quá trình mã hóa.

2. Thuật toán giải mã.

InvCipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)]) begin byte state[4,Nb] state = in
AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1]) for round = Nr-1 downto 1 InvShiftRows(state) InvSubBytes(state) AddRoundKey(state, w[round*Nb, (round+1)*Nb-1]) InvMixColumns(state) end for InvShiftRows(state) InvSubBytes(state) AddRoundKey(state, w[0, Nb-1]) out = state end

Trong đó :

  • In[] : Mảng dự liệu đầu vào Input.
  • Out[] : Mảng dữ liệu đầu ra Output.
  • Nr : Số vòng lặp.(Nr = 10).
  • Nb : Số cột(Nb = 4).
  • W[] : Mảng các w[i] có độ dài 4 bytes.

IV. Các dạng tấn công vào AES và phương pháp phòng chống.

1. Side-channel attack.

  • Side Channels (Kênh kề) được định nghĩa là các kênh đầu ra không mong muốn từ một hệ thống.
  • Tấn công kênh bên hay còn gọi là Tấn công kênh kề là loại tấn công dễ thực hiện trong các loại tấn công mạnh chống lại quá trình triển khai mã hóa, và mục tiêu của loại tấn công này là phân tích các nguyên tố, các giao thức, modul, và các thiết bị trong mỗi hệ thống.
  • Phân loại :
    • Tấn công thời gian.
    • Tấn công dựa vào lỗi.
    • Tấn công phân tích năng lượng.
    • Tấn công phân tích điện từ.

2. Known attacks.

  • Vào năm 2002, Nicolas Courtois và Josef Pieprzyk phát hiện một tấn công trên lý thuyết gọi là tấn công XSL và chỉ ra điểm yếu tiềm tàng của AES.
  • Tuy nhiên, một vài chuyên gia về mật mã học khác cũng chỉ ra một số vấn đề trong cơ sở toán học của tấn công này và cho rằng các tác giả đã có sai lầm trong tính toán. Việc tấn công dạng này có thực sự trở thành hiện thực hay không vẫn còn để ngỏ và cho tới nay thì tấn công XSL vẫn chỉ là suy đoán.

3. Các phương pháp phòng chống.

  • Phương pháp 1: Mã hóa cực mạnh
    • Sử dụng các biện pháp để tăng tính bảo mật của các thuật toán mã hóa.
  • Phương pháp 2: Bảo vệ dữ liệu theo phương pháp vật lý
    • Nếu một kẻ tấn công không thể tiếp cận vật lý với dữ liệu, dĩ nhiên khả năng đánh cắp khóa mã hóa sẽ khó khăn hơn. Vì vậy, trước những cuộc tấn công qua âm thanh tiềm tàng, bạn có thể sử dụng các giải pháp bảo vệ vật lý như đặt laptop vào các hộp cách ly âm thanh, không để ai lại gần máy tính khi đang giải mã dữ liệu hoặc sử dụng các nguồn âm thanh băng rộng tần số đủ cao để gây nhiễu.
  • Phương pháp 3: Kết hợp cả 2 cách trên.

Kết luận và đánh giá thuật toán.

  • Thiết kế và độ dài khóa của thuật toán AES ( 128, 192 và 256 bit ) là đủ an toàn để bảo vệ các thông tin được xếp vào loại tối mật nhưng về an ninh của AES thì các nhà khoa học đánh giá là chưa cao. Nếu các kỹ thuật tấn công được cải thiện thì AES có thể bị phá vỡ.
  • Một vấn đề khác nữa là cấu trúc toán học của AES khá đơn giản.

Nguồn tham khảo.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 500

- vừa được xem lúc

Cài đặt WSL / WSL2 trên Windows 10 để code như trên Ubuntu

Sau vài ba năm mình chuyển qua code trên Ubuntu thì thật không thể phủ nhận rằng mình đã yêu em nó. Cá nhân mình sử dụng Ubuntu để code web thì thật là tuyệt vời.

0 0 374

- vừa được xem lúc

Đặt tên commit message sao cho "tình nghĩa anh em chắc chắn bền lâu"????

. Lời mở đầu. .

1 1 701

- vừa được xem lúc

Tìm hiểu về Resource Controller trong Laravel

Giới thiệu. Trong laravel, việc sử dụng các route post, get, group để gọi đến 1 action của Controller đã là quá quen đối với các bạn sử dụng framework này.

0 0 335

- vừa được xem lúc

Phân quyền đơn giản với package Laravel permission

Như các bạn đã biết, phân quyền trong một ứng dụng là một phần không thể thiếu trong việc phát triển phần mềm, dù đó là ứng dụng web hay là mobile. Vậy nên, hôm nay mình sẽ giới thiệu một package có thể giúp các bạn phân quyền nhanh và đơn giản trong một website được viết bằng PHP với framework là L

0 0 421

- vừa được xem lúc

Bạn đã biết các tips này khi làm việc với chuỗi trong JavaScript chưa ?

Hi xin chào các bạn, tiếp tục chuỗi chủ đề về cái thằng JavaScript này, hôm nay mình sẽ giới thiệu cho các bạn một số thủ thuật hay ho khi làm việc với chuỗi trong JavaScript có thể bạn đã hoặc chưa từng dùng. Cụ thể như nào thì hãy cùng mình tìm hiểu trong bài viết này nhé (go).

0 0 414