Bài viết được lấy từ https://truongphuoc.wordpress.com/2023/02/18/blockchain-14-mat-ma-hoc-co-ban/
Mật mã học
Chắc hẳn đối với các bạn dev thì mật mã không còn là một khái niệm mới nữa rồi phải không nào. Nó dùng để bảo vệ thông tin một cách hiệu quả, và thông tin đã mã hóa có thể giải mã một cách dễ dàng.
Trong bài viết này và các bài viết về sau, mình sẽ quy ước như sau:
- An: Người muốn gửi tin nhắn.
- Bình: Người muốn nhận tin nhắn.
- Công: Người ở giữa, muốn phá hoại.
- Plain text: Nội dung tin nhắn ban đầu (Bản rõ - ai đọc cũng hiểu).
- Cypher text: Nội dung tin nhắn đã được mã hóa (Đọc không ai hiểu cả).
- Cypher: Là thuật toán mã hóa.
- Encrypt: Mã hóa - Chuyển từ Plain text qua Cypher text qua thuật toán mã hóa nào đó.
- Decrypt: Giải mã - Chuyển từ Cypher text sang Plain text qua thuật toán giải mã.
- Key: Chìa khóa dùng để mã hóa và giải mã.
- Key length: Độ dài của khóa.
Sau đây là những nguyên lý bảo mật thông tin trong mật mã học, một thuật toán mã hóa tốt là một thuật toán đáp ứng đầy đủ các nguyên lý sau:
- Tính bí mật/riêng tư: Chỉ An và Bình mới hiểu được thông tin trao đổi, Công thì không.
- Tính toàn vẹn: An gửi cho Bình thông tin: "Tối đi chơi" đã được mã hóa, khi nhận được thông tin này, Bình sẽ phải biết chắc rằng thông tin này là đầy đủ, không bị thiếu và không bị thay đổi.
- Tính xác thực: Bình phải chứng minh được mình thực sự là người muốn nhận tin, chứ mình không phải là Công - kẻ muốn phá hoại.
- Tính không thể chối bỏ: Khi Bình nhận được tin của An, thì An không thể chối bỏ rằng mình không phải là người gửi tin đó.
- Tính nhận dạng: Trong một hệ thống có nhiều người sử dụng, phải biết được rằng Bình có đúng quyền hạn để nhận tin của An hay không.
Thuật toán mật mã học cổ điển
Chúng ta cùng hiểu hiểu một thuật toán mã hóa cổ điển nhé. Thuật toán này được đặt tên theo một nhân vật rất nổi tiếng trong lịch sử, người này tên là Julius Ceasar, hoàng đế La Mã cổ đại. Ông này là người sử dụng thuật toán này rất nhiều trong chiến tranh để trao đổi thông tin với các tướng lĩnh của mình.
Julius Ceasar
Thuật toán này cực kỳ đơn giản: Ta có bảng chữ cái Latin - cụ thể trong trường hợp này là tiếng Anh. Với mỗi ký tự của Plain text, ta dịch chuyển ký tự đó đi sang phải K lần trong bảng chữ cái.
Ví dụ với Plain text là: "NHA NGHI LY TRI", ta chọn K = 1, khi đó với mỗi ký tự trong plain text là dịch đi sang phải 1 đơn vị trong bảng chữ cá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
N -> O
H -> I
A -> B
N -> O
G -> H
H -> I
I -> J
L -> M
Y -> Z
T -> U
R -> S
I -> J
Sau khi mã hóa được Cypher text như sau: "OIB OHIJ MZ USJ". Đúng là khi đọc vào chẳng hiểu gì cả, cũng chẳng có ý nghĩa gì cả.
Để chuyển từ dạng Cypher text trên về dạng Plain text, chúng ta làm ngược lại, dịch một ký tự trong Cypher text sang trái 1 ký tự.
O -> N
I -> H
B -> A
O -> N
H -> G
I -> H
J -> I
M -> L
Z -> Y
U -> T
S -> R
J -> I
Như thế ta đã được bản rõ ban đầu "NHA NGHI LY TRI" rồi.
Trong thuật toán này, K chính là Key để mã hóa và giải mã. Với K = 1, thì ta phải dịch sang phải 1 đơn vị khi mã hóa và dịch sang trái 1 đơn vị khi giải mã, còn K = 3 thì ta phải dịch sang phải 3 đơn vị khi mã hóa và dịch sang trái 3 đơn vị khi giải mã.
Mật mã học hiện đại - Mật mã học máy tính
Trong thời kỳ xa sưa thì mật mã dành chủ yếu trong ngoại giao và quân sự. Với sự phát triển của khoa học công nghệ, đặc biệt là việc phát minh ra máy tính và internet. Việc trao đổi thông tin giữa người với người, máy với máy, người với máy diễn ra thường xuyên trên môi trường internet.
Internet là một môi trường mở, với rất nhiều rủi ro tiềm tàng khi truyền tin trên đó. Ví dụ khi bạn rút tiền ở cây ATM, bạn thực hiện một giao dịch rút 10 triệu. Lúc này cây ATM (thực chất là một máy tính có kết nối mạng) sẽ gửi tin về cho máy chủ ngân hàng, để kiểm tra tài khoản của bạn, sau ngân hàng đã kiểm tra đủ điều kiện thì truyền tin lại cho cây ATM rằng đủ điều kiện rồi. Lúc này cây ATM sẽ nhả tiền ra cho bạn.
Điều gì xảy ra nếu trong quá trình cây ATM gửi tin tới ngân hàng, nội dung bị thay đổi từ rút 10 triệu thành rút 20 triệu. Hay trong quá trình gửi tin từ ngân hàng tới cây ATM bị thay đổi. Rất là nguy hiểm phải không nào. Chính vì thế mã hóa trong môi trường mở như internet là một việc quan trọng.
Các loại mã hóa
Có nhiều cách để phân chia các thuật toán mã hóa, với kiểu phân chia theo Key thì thuật toán mã hóa được chia thành 2 loại:
- Mã hóa đối xứng: Key mã hóa và Key giải mã là giống nhau.
- Mã hóa bất đối xứng: Key mã hóa và Key giải mã khác nhau.
Bài viết đến đây là hết rồi. Trong bài tiếp theo mình cùng tìm hiểu về thuật toán mã hóa đối xứng nhé.
Link bài viết gốc: https://truongphuoc.wordpress.com/2023/02/18/blockchain-14-mat-ma-hoc-co-ban/