✨MD5

MD5

Trong mật mã học, MD5 (viết tắt của tiếng Anh Message-Digest algorithm 5, Thuật toán Tiêu hóa-tin nhắn 5) là một hàm băm mật mã học được sử dụng phổ biến với giá trị băm (hash) dài 128-bit. Là một chuẩn Internet (RFC 1321), MD5 đã được dùng trong nhiều ứng dụng bảo mật, và cũng được dùng phổ biến để kiểm tra tính toàn vẹn của tập tin. Một bảng băm MD5 thường được diễn tả bằng một số hệ thập lục phân 32 ký tự.

MD5 được thiết kế bởi Ronald Rivest vào năm 1991 để thay thế cho hàm băm trước đó, MD4. Vào năm 1996, người ta phát hiện ra một lỗ hổng trong MD5; trong khi vẫn chưa biết nó có phải là lỗi nghiêm trọng hay không, những chuyên gia mã hóa bắt đầu đề nghị sử dụng những giải thuật khác, như SHA-1 (khi đó cũng bị xem là không an toàn). Trong năm 2004, nhiều lỗ hổng hơn bị khám phá khiến cho việc sử dụng giải thuật này cho mục đích bảo mật đang bị đặt nghi vấn.

Lịch sử và thuật toán

Tiêu hoá Tin nhắn là một loạt các thuật toán đồng hóa thông tin được thiết kế bởi Giáo sư Ron Rivest của trường MIT (Rivest, 1994). Khi công việc phân tích chỉ ra rằng giải thuật trước MD5-MD4- có vẻ không an toàn, ông đã thiết kế ra MD5 vào năm 1991 để thay thế an toàn hơn. (Điểm yếu của MD4 sau đó đã được Hans Dobbertin tìm thấy).

Vào năm 1993, Den Boer và Bosselaers đã tìm ra, tuy còn giới hạn, một dạng "xung đột ảo" của hàm nén MD5; đó là, với hai véc-tơ khởi tạo IJ khác nhau 4 bit, dẫn đến: :MD5compress(I,X) = MD5compress(J,X).

Trong năm 1996, Dobbertin đã thông báo có xung đột của hàm nén MD5 (Dobbertin, 1996). Dù nó không phải là một cuộc tấn công vào toàn bộ hàm băm MD5, nhưng nó đủ gần để các chuyên gia mã hóa đề nghị sử dụng kỹ thuật khác để thay thế, như WHIRLPOOL, SHA-1 hay RIPEMD-160.

Kích thước của bảng băm-128 bit-đủ nhỏ để bị tấn công bruteforce. MD5CRK là một dự án phân bố bắt đầu vào tháng 3 năm 2004 với mục tiêu chứng tỏ rằng MD5 không an toàn trên thực tế bằng cách tìm ra những xung đột sử dụng tấn công bruteforce.

MD5CRK kết thúc nhanh chóng sau ngày 17 tháng 8 năm 2004, khi xung đột đối với toàn bộ MD5 được công bố bởi Xiaoyun Wang, Dengguo Feng, Xuejia Lai, và Hongbo Yu. Cuộc tấn công phân tích của họ được báo cáo là chỉ diễn ra có một giờ trên nhóm máy IBM p690.

Vào ngày 1 tháng 3 năm 2005, Arjen Lenstra, Xiaoyun Wang, và Benne de Weger đã biểu diễn việc xây dựng hai giấy phép X.509 với các khóa công cộng khác nhau và cùng bảng băm MD5, một sự xung đột thực thế đáng được trình diễn. Sự xây dựng bao gồm những khóa riêng tư cho cả hai khóa công cộng. Vài ngày sau, Vlastimil Klima đã mô tả một giải thuật nâng cao, có thẻ xây dựng những xung đột MD5 trong vài giờ với một máy tính xách tay. Vào ngày 18 tháng 3 năm 2006, Klima đã phát hành một giải thuật có thể tìm thấy đụng độ trong vòng một phút bằng một máy tính xách tay, sử dụng một phương thức mà anh gọi là bắt đường hầm.

Ứng dụng

Các đồng hóa MD5 được dùng rộng rãi trong các phần mềm trên toàn thế giới để đảm bảo việc truyền tập tin được nguyên vẹn. Ví dụ, máy chủ tập tin thường cung cấp một tổng kiểm (checksum) MD5 được tính toán trước cho tập tin, để người dùng có thể so sánh với tổng kiểm của tập tin đã tải về. Những hệ điều hành dựa trên nền tảng Unix luôn kèm theo tính năng MD5 sum trong các gói phân phối của họ, trong khi người dùng Windows sử dụng ứng dụng của hãng thứ ba.

Tuy nhiên, hiện nay dễ dàng tạo ra xung đột MD5, một người có thể tạo ra một tập tin để tạo ra tập tin thứ hai với cùng một tổng kiểm, do đó kỹ thuật này không thể chống lại một vài dạng giả mạo nguy hiểm. Ngoài ra, trong một số trường hợp tổng kiểm không thể tin tưởng được (ví dụ, nếu nó được lấy từ một lệnh như tập tin đã tải về), trong trường hợp đó MD5 chỉ có thể có chức năng kiểm tra lỗi: nó sẽ nhận ra một lỗi hoặc tải về chưa xong, rất dễ xảy ra khi tải tập tin lớn.

MD5 được dùng rộng rãi để lưu trữ mật khẩu. Để giảm bớt sự dễ thương tổn đề cập ở trên, ta có thể thêm muối (salt) vào mật khẩu trước khi băm chúng. Một vài hiện thực có thể áp dụng vào hàm băm hơn một lần- xem làm mạnh thêm khóa.

Thuật toán

[[Tập tin:MD5.png|phải|Hình 1. Một thao tác MD5—MD5 bao gồm 64 tác vụ thế này, nhóm trong 4 vòng 16 tác vụ. F là một hàm phi tuyết; một hàm được dùng trong mỗi vòng. Mi chỉ ra một khối tin nhập vào 32-bit, và Ki chỉ một hằng số 32-bit, khác nhau cho mỗi tác vụ.

dịch tráis chỉ sự xoay bit về bên trái s đơn vị; s thay đổi tùy theo từng tác vụ. Thêm chỉ cộng thêm với modulo 232. ]]

MD5 chuyển một đoạn thông tin chiều dài thay đổi thành một kết quả chiều dài không đổi 128 bit. Mẩu tin đầu vào được chia thành từng đoạn 512 bit; mẩu tin sau đó được độn sao cho chiều dài của nó chia chẵn cho 512. Công việc độn vào như sau: đầu tiên một bit đơn, 1, được gắn vào cuối mẩu tin. Tiếp theo là một dãy các số zero sao cho chiều dài của mẩu tin lên tới 64 bit ít hơn so với bội số của 512. Những bit còn lại được lấp đầy bằng một số nguyên 64-bit đại diện cho chiều dài của mẩu tin gốc.

Thuật toán MD5 chính hoạt động trên trạng thái 128-bit, được chia thành 4 từ 32-bit, với ký hiệu A, B, CD. Chúng được khởi tạo với những hằng số cố định. Thuật toán chính sau đó sẽ xử lý các khối tin 512-bit, mỗi khối xác định một trạng thái. Quá trình xử lý khối tin bao gồm bốn giai đoạn giống nhau, gọi là vòng; mỗi vòng gồm có 16 tác vụ giống nhau dựa trên hàm phi tuyến F, cộng mô đun, và dịch trái. Hình 1 mô tả một tác vụ trong một vòng. Có 4 khả năng cho hàm F; mỗi cái được dùng khác nhau cho mỗi vòng: :F(X,Y,Z) = (X\wedge{Y}) \vee (\neg{X} \wedge{Z}) :G(X,Y,Z) = (X\wedge{Z}) \vee (Y \wedge \neg{Z})

:H(X,Y,Z) = X \oplus Y \oplus Z :I(X,Y,Z) = Y \oplus (X \vee \neg{Z}) \oplus, \wedge, \vee, \neg lần lượt chỉ phép XOR, AND, OR và NOT.

Đây là quá trình thực hiện xử lý của 4 hàm F, G, H, I ở trên:

Vòng 1: Ký hiệu [abcd j s i] là bước thực hiện của phép toán a = b + ((a + F(b, c, d) + M[j] + K[i]) <<< s) Quá trình thực hiện 16 bước sau: [ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4] [ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8] [ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12] [ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16] Giải thích: ví dụ biểu thức thứ 2 là [DABC 1 12 2], tương đương với:

D = A + ((D + F(A,B,C) + M[1] + K[2]) <<< 12)

Nhận xét: Vòng 1 dùng hàm F, Với giá trị j từ 0 -> 15 và i từ 1 -> 16

Vòng 2: Tương tự, ký hiệu [abcd j s i] là của biểu thức: a = b + ((a + G(b, c, d) + M[j] + K[i]) <<< s) Quá trình thực hiện 16 bước:

[ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20]

[ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24]

[ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28]

[ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32]

Nhận xét: Vòng 2 dùng hàm G, với i từ 17 -> 32 và j = 1 + 5j mod 16

Vòng 3:

Tương tự, ký hiệu [abcd j s i] là của biểu thức: a = b + ((a + H(b, c, d) + M[j] + K[i]) <<< s)

Quá trình thực hiện 16 bước:

[ABCD 5 4 33] [DABC 8 11 34] [CDAB 1 16 35] [BCDA 14 23 36]

[ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40]

[ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44]

[ABCD 9 4 45] [DABC 12 11 46] [CDAB 5 16 47] [BCDA 2 23 48]

Nhận xét: Vòng 3 dùng hàm H, với i từ 33 -> 48 và j =5 + 3j mod 16

Vòng 4:

Tương tự, ký hiệu [abcd j s i] là của biểu thức:

a = b + ((a + I(b,c,d) + M[j] + K[i]) <<< s)

Quá trình thực hiện 16 bước:

[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52]

[ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56]

[ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60]

[ABCDb 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]

Nhận xét: Vòng 4 dùng hàm I, với i từ 49 -> 64 và j =7j mod 16

/ Sau đó làm các phép cộng sau. (Nghĩa là cộng vào mỗi thanh ghi giá trị của nó trước khi vào vòng lặp) /

A = A + AA

B = B + BB

C = C + CC

D = D + DD

End / of loop on i /

Bước 5: Tính kết quả tiêu hoá thông điệp. Sau khi thực hiện xong bước 4, thông điệp thu gọn nhận được từ 4 thanh ghi A, B, C, D, bắt đầu từ byte thấp của thanh ghi A và kết thúc với byte cao của thanh ghi D bằng phép nối như sau: Message Digest = A || B || C || D. (|| phép toán nối)

Mã giả

Mã giả cho thuật toán MD5 như sau.

//Chú ý: Tất cả các biến đều là biến không dấu 32 bit và bao phủ mô đun 2^32 khi tính toán var int[64] r, k

//r xác định số dịch chuyển mỗi vòng r[ 0..15]:= {7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22} r[16..31]:= {5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20} r[32..47]:= {4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23} r[48..63]:= {6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21}

//Sử dụng phần nguyên nhị phân của sin của số nguyên làm hằng số: for i from 0 to 63 k[i]:= floor(abs(sin(i + 1)) × (2 pow 32))

//Khởi tạo biến: var int h0:= 0x67452301 var int h1:= 0xEFCDAB89 var int h2:= 0x98BADCFE var int h3:= 0x10325476

//Tiền xử lý: append "1" bit to message append "0" bits until message length in bits ≡ 448 (mod 512) append bit (bit, not byte) length of unpadded message as 64-bit little-endian integer to message

//Xử lý mẩu tin trong đoạn 512-bit tiếp theo: for each 512-bit chunk of message break chunk into sixteen 32-bit little-endian words w[i], 0 ≤ i ≤ 15

//Khởi tạo giá trị băm cho đoạn này: var int a:= h0 var int b:= h1 var int c:= h2 var int d:= h3

//Vòng lặp chính: for i from 0 to 63 if 0 ≤ i ≤ 15 then f:= (b and c) or ((not b) and d) g:= i else if 16 ≤ i ≤ 31 f:= (d and b) or ((not d) and c) g:= (5×i + 1) mod 16 else if 32 ≤ i ≤ 47 f:= b xor c xor d g:= (3×i + 5) mod 16 else if 48 ≤ i ≤ 63 f:= c xor (b or (not d)) g:= (7×i) mod 16

temp:= d d:= c c:= b b:= b + leftrotate((a + f + k[i] + w[g]), r[i]) a:= temp

//Thêm bảng băm của đoạn vào kết quả: h0:= h0 + a h1:= h1 + b h2:= h2 + c h3:= h3 + d

var int digest:= h0 append h1 append h2 append h3 //(expressed as little-endian)

//định nghĩa hàm dịch trái leftrotate (x, c) return (x << c) or (x >> (32-c));

Ghi chú: Thay vì hàm hóa RFC 1321 gốc như trên, phần sau có thể được dùng để tăng độ hiệu quả (hữu ích nếu ngôn ngữ assembly được dùng - còn không, chương trình dịch sẽ tự động tối ưu hóa đoạn mã ở trên): (0 ≤ i ≤ 15): f:= d xor (b and (c xor d)) (16 ≤ i ≤ 31): f:= c xor (d and (b xor c))

Các bảng băm MD5

Bảng băm MD5 128 bit (16 byte) (còn được gọi là message digests) được biểu diễn bằng chuỗi 32 số thập lục phân. Sau đây cho thấy đầu vào ASCII 43 byte và bảng băm MD5 tương ứng:

MD5("The quick brown fox jumps over the lazy dog") = 9e107d9d372bb6826bd81d3542a419d6

Thậm chí một sự thay đổi nhỏ trong mẩu tin cũng dẫn đến thay đổi hoàn toàn bảng băm, do hiệu ứng thác. Ví dụ, thay d thành e:

MD5("The quick brown fox jumps over the lazy eog") = ffd93f16876049265fbaef4da268dd0e

Bảng băm của một chuỗi rỗng là:

MD5("") = d41d8cd98f00b204e9800998ecf8427e

👁️ 1 | 🔗 | 💖 | ✨ | 🌍 | ⌚
Trong mật mã học, **MD5** (viết tắt của tiếng Anh **Message-Digest algorithm 5**, Thuật toán Tiêu hóa-tin nhắn 5) là một hàm băm mật mã học được sử dụng phổ biến với giá trị băm
Trong mật mã hóa khóa công khai**, vân tay khóa công khai** là một chuỗi byte ngắn được sử dụng để xác định khóa công khai dài hơn. Dấu vân tay được tạo bằng cách
nhỏ|Từ trái sang phải: [[Daniel Passarella, Messi và Diego Maradona; ba đội trưởng vô địch thế giới của đội tuyển quốc gia Argentina]] nhỏ| Messi nhận giải Quả bóng vàng, cùng với những giải thưởng
liên_kết=https://en.wikipedia.org/wiki/File:ClamTk_5.27.png|nhỏ|300x300px|[[ClamTk, một phần mềm diệt vi-rút mã nguồn mở dựa trên công cụ diệt virus ClamAV, ban đầu được Tomasz Kojm phát triển vào năm 2001.]] nhỏ|255x255px|Ảnh chụp giao diện phần mềm diệt virus có
Trong ngành mật mã học, một **Hàm băm mật mã học** (tiếng Anh: _Cryptographic hash function_) là một hàm băm với một số tính chất bảo mật nhất định để phù hợp việc sử dụng
**Phòng thủ Hippopotamus** (Hippopotamus: tiếng Việt: con hà mã) là tên gọi chung của nhiều hệ thống khai cuộc bất thường khác nhau mà trong đó bên Đen sẽ di chuyển một số lượng Tốt
**Bẫy Légal**, hay **Bẫy Blackburne** (còn được biết đến với tên gọi **Thí quân Légal Pseudo** hay **Mat Légal**) là một bẫy khai cuộc, đặc trưng bởi việc thí Hậu của Trắng theo sau đó
frame|right|thumb|Hình động minh họa ván đấu **Ván cờ bất tử** là tên gọi dành cho một ván đấu cờ vua nổi tiếng giữa Adolf Anderssen và Lionel Kieseritzky diễn ra vào ngày 21 tháng 6
Đây là bài nhằm phân loại, sắp xếp theo chủ đề các bài trong lĩnh vực mật mã học. ## Các thuật toán mã hóa cổ điển * Mật mã khóa tự động [http://en.wikipedia.org/wiki/Autokey_cipher] *
**Mật khẩu**, đôi khi được gọi là **mật mã**, là một bí mật được ghi nhớ, thường là một chuỗi ký tự, được sử dụng để xác nhận danh tính của người dùng. Sử dụng
**Friedrich August von Hayek** (8 tháng 5 năm 1899 – 23 tháng 3 năm 1992) là một nhà kinh tế học và nhà khoa học chính trị người Anh gốc Áo nổi tiếng. Hayek được
nhỏ|phải|[[Máy Enigma, được người Đức sử dụng trong Đại chiến thế giới II, thực hiện mã hóa được bao vệ các thông tin tính toán học nhạy cam.]] **Mật mã học** là một lĩnh vực
**Quyển bá**, hay còn gọi **thanh tùng**, **chân vịt**, **quyển bá trường sinh**, **trường sinh thảo** (danh pháp hai phần: **_Selaginella tamariscina_**) thuộc họ Quyển bá (_Selaginellaceae_). Cây mọc ở các vùng núi đá hoặc
**SHA** (Secure Hash Algorithm hay Thuật toán Băm An toàn) là năm thuật toán được chấp nhận bởi FIPS dùng để chuyển một đoạn dữ liệu nhất định thành một đoạn dữ liệu có chiều
**FTP** (viết tắt của _File Transfer Protocol,_ dịch ra là "Giao thức truyền tập tin") thường được dùng để trao đổi tập tin qua mạng lưới truyền thông dùng giao thức TCP/IP (chẳng hạn như
**Phương pháp Delphi** ( ) là kỹ thuật thông tin liên lạc có cấu trúc, có nguồn gốc từ phương pháp dự đoán đối xứng và dự báo tương tác dựa trên bảng trả lời
**Công ty Cổ phần BKAV** là một công ty công nghệ hoạt động trong các lĩnh vực an ninh mạng, chuyển đổi số, phần mềm, chính phủ điện tử, sản xuất điện thoại thông minh
**cksum** là một tiện ích trên các hệ điều hành giống Unix, có chức năng tính giá trị tổng kiểm của một tập tin hay luồng/khối dữ liệu. Lệnh xử lý từng tập tin được
**Rufus** (The **R**eliable **U**SB **F**ormatting **U**tility, with **S**ource) là một phần mềm portable tự do nguồn mở cho Microsoft Windows. Phần mềm này dùng để định dạng và tạo ổ USB flash khởi động hoặc
Khuôn silicon 4d hoa mẫu đơn 5.5cm Chất liệu: Silicon Kích thước: 5.5*5.5*2cm Xuất xứ: Nhập khẩu Mô tả sản phẩm: (1) sử dụng vật liệu silicone chất lượng cao và đã thông qua chứng
**Phòng thủ Sicilia** (hay **phòng thủ Xixilia**) là một khai cuộc cờ vua bắt đầu với các nước đi sau: : 1. e4 c5 Phòng thủ Sicilia là câu trả lời tốt nhất và hiệu
**RPM Package Manager** (**RPM**) (ban đầu là **Red Hat Package Manager**; bây giờ là một từ viết tắt đệ quy) là một trình quản lý gói. Tên gọi RPM đề cập đến: định dạng file.rpm,
Trong cờ vua, một quân **Tốt lạc hậu** là quân Tốt nằm dưới mọi quân Tốt ở ô cùng màu khác trên các cột kề bên và không thể tiến lên một cách an toàn.
**CrushFTP** là một chương trình máy chủ truyền tải file đa nền tảng, đa giao thức, có sở hữu, được phát triển kể từ năm 1999. CrushFTP là một phần mềm shareware với nhiều mức
**Ván cờ Tây Ban Nha**, hay cũng thường được gọi là **Khai cuộc Tây Ban Nha** hoặc **Ruy López** là một khai cuộc cờ vua đặc trưng bởi các nước đi sau: :1. e4 e5
Trong cờ vua, **Phương án con rồng** là một trong những diễn biến chính của khai cuộc phòng thủ Sicilia, bắt đầu bằng những nước sau: :1. e4 c5 :2. Mf3 d6 :3. d4 cxd4
nhỏ|Hình ảnh động về Ván cờ bất tử, một ván cờ vua được chơi vào năm 1872 tại [[Viên , Áo bởi Carl Hamppe và Philipp Meitner]] **Ván hòa bất tử** là một ván đấu
**Lingoes** là một phần mềm dịch thuật, từ điển, phát hành dưới dạng tiện ích phần mềm miễn phí. Phiên bản đầu tiên của phần mềm được phát hành ngày 1 tháng 9 năm 2006,
nhỏ|Ảnh chụp màn hình của ứng dụng "Root Verifier" trên điện thoại [[Android (hệ điều hành)|Android đã được root thành công.]] **Root** (gốc rễ) là quá trình cho phép người dùng điện thoại thông minh,
**Giao thức dự trữ tài nguyên (RSVP)** là một giao thức lớp truyền tải được thiết kế để dự trữ tài nguyên trên một mạng bằng cách sử dụng mô hình dịch vụ tích hợp.
**Ván 6** của trận tái đấu giữa Deep Blue và Garry Kasparov diễn ra tại thành phố New York lúc 3 giờ chiều EDT ngày 11 tháng 5 năm 1997. Đây là ván cuối cùng
Trong điện toán, **Post Office Protocol,** viết tắt: **POP** là một giao thức tiêu chuẩn Internet ở tầng ứng dụng được sử dụng bởi email khách hàng để lấy e-mail từ máy chủ thư. POP
Hệ thống thanh toán thẻ được cung cấp bởi các đối tác cổng thanh toán (“Đối Tác Cổng Thanh Toán”) đã được cấp phép hoạt động hợp pháp tại Việt Nam. Theo đó, các tiêu
Hệ thống thanh toán thẻ được cung cấp bởi các đối tác cổng thanh toán (“Đối Tác Cổng Thanh Toán”) đã được cấp phép hoạt động hợp pháp tại Việt Nam. Theo đó, các tiêu
Hệ thống thanh toán thẻ được cung cấp bởi các đối tác cổng thanh toán (“Đối Tác Cổng Thanh Toán”) đã được cấp phép hoạt động hợp pháp tại Việt Nam. Theo đó, các tiêu
THÔNG TIN SẢN PHẨM Váy công chúa bé gái nỉ ren xòe nhiều mẫu NB Jumping Meters cao cấpThương hiệu: Jumping metersChất liệu : nỉ da cáVáy bé gái ren xòe công chúa Jumping Meters