# data[].attributes.body
- Phan Quang Nhã: tìm hiểu Sử dụng khóa đối xứng
+ STT - 39
+ MSV - 2050531200240
- Lương Hàn Nhật: tìm hiểu Không sử dụng khóa
+ STT - 41
+ MSV - 2050531200244
- Lê Anh Quốc (Nhóm trưởng): tìm hiểu tổng quát, tổng hợp, hoàn chỉnh padlet
+ STT - 50
+ MSV - 2050531200262
- Trần Hữu Tiến Đạt: tìm hiểu Sử dụng khóa bất đối xứng
+ STT - 68
+ MSV - 2050531200128

# data[].attributes.body
Các hệ thống mật mã sử dụng một tập hợp các thủ tục hoặc chỉ thị được gọi là các thuật toán mật mã để mã hóa và giải mã thông tin nhằm bảo mật liên lạc giữa các hệ thống máy tính, thiết bị như điện thoại thông minh và ứng dụng.
Các thuật toán mật mã có thể bao gồm các thuật toán mã hóa, các thuật toán xác thực thông điệp, các thuật toán giải mã, các thuật toán sinh khóa, trao đổi khóa...
Các thuật toán này được kết hợp lại trong các giao thức và được viết bằng phần mềm chạy trên hệ điều hành hoặc hệ thống máy tính kết nối mạng, cho phép mã hóa/giải mã dữ liệu, ký và xác minh chữ ký số để xác thực thông điệp và trao đổi khóa.

# data[].attributes.headline
Thuật Toán Giải Mã - Decryption Algorithm

# data[].attributes.subject
Thuật Toán Giải Mã - Decryption Algorithm

# data[].attributes.body
Quá trình giải mã được thực hiện thông qua các thuật toán giải mã. Thuật toán giải mã là các giao thức hoặc hướng dẫn có tác dụng chuyển đổi văn bản mã về văn bản rõ.

# data[].attributes.headline
Thuật Toán Mã Hóa - Encryption Algorithm

# data[].attributes.subject
Thuật Toán Mã Hóa - Encryption Algorithm

# data[].attributes.body
Quá trình mã hóa được thực hiện thông qua các thuật toán mã hóa.
Thuật toán mã hóa là các giao thức hoặc hướng dẫn có tác dụng chuyển đổi văn bản rõ thành văn bản mã.

Đối với các hệ thống mật mã truyền thống, chỉ có người gửi thông điệp biết được thuật toán mã hóa, tuy nhiên đối với các hệ thống dùng mật mã hóa khóa công khai, tất cả mọi người đều có thể biết thuật toán mã hóa mà không ảnh hưởng tiêu cực đến độ an toàn của hệ thống.

# data[].attributes.body
Các hệ thống mật mã thực hiện hai quá trinh: mã hóa và giải mã

# data[].attributes.body
Trong những năm gần đây, mật mã cũng cung cấp cơ chế cho nhiều hoạt động như: chứng thực khóa công khai, chữ ký số, bầu cử điện tử hay tiền điện tử.

Bạn dùng mật khẩu, đó là ứng dụng của mật mã. Bạn dùng thẻ ngân hàng, đó là ứng dụng của mật mã. Bạn dùng thanh toán online, bạn chat với bạn bè, gửi email, vào các trang web HTTPS,...tất cả đều là ứng dụng của mật mã. Ứng dụng của mật mã có ở khắp mọi nơi!

# data[].attributes.body
Mật mã được sử dụng phổ biến và là nền tảng quan trọng của an toàn thông tin. Trọng tâm của mật mã học hiện đại là bảo vệ tính bí mật, tính toàn vẹn, tính xác thực và tính chống chối bỏ của dữ liệu.

# data[].attributes.body
Chúng ta muốn xác nhận rằng thông điệp này đúng là do bản thân chúng ta ký vào nó, và mọi người đều có thể xác thực được. Do vậy, chữ ký số cần được giải mã bởi mọi người. Để đáp ứng điều này, chúng ta cần cho họ khóa chung (hay khóa công khai) và việc mã hóa diễn ra bằng khóa riêng bí mật của chính chúng ta.

Khi bạn mã hóa một cái gì đó bằng khóa riêng của mình, bất kỳ ai cũng có thể giải mã nó bằng khóa công khai, điều này nghe thật vô dụng, nhưng điều này đóng vai trò là bằng chứng cho việc bạn đã mã hóa dữ liệu. Nếu người khác không thể giải mã đúng dữ liệu bằng khóa công khai của bạn, thì hoặc là dữ liệu đã bị thay đổi và mất tính toàn vẹn hoặc là bạn không hề ký và tạo ra dữ liệu đó.

# data[].attributes.body
Chữ ký số là không thể sửa chữa và dễ dàng kiểm chứng nhờ sử dụng mật mã khóa công khai. Ngoài ra, do khóa riêng trong hệ mật khóa công khai chỉ liên kết đến một người dùng duy nhất, và chỉ có người dùng đó giữ khóa riêng, vì vậy chữ ký số cũng đảm bảo khả năng chống chối bỏ, có nghĩa là khi đã ký số lên dữ liệu thì người dùng không thể chối bỏ việc đã ký lên nó, và do vậy, chúng có thể ràng buộc về mặt pháp lý như chữ ký thông thường.

# data[].attributes.body
ECC là một kỹ thuật mã hóa khóa công khai dựa trên lý thuyết đường cong elliptic có thể tạo ra các khóa mật mã nhanh hơn, nhỏ hơn và hiệu quả hơn. ECC tạo các khóa thông qua các thuộc tính của phương trình đường cong elliptic.

Để phá vỡ ECC, người ta phải tính toán bài toán logarit rời rạc trên đường cong elliptic và trên thực tế đây là một vấn đề cực kỳ khó khăn thậm chí hơn cả bài toán phân tích số nguyên tố. Do đó, kích thước khóa của ECC có thể nhỏ hơn đáng kể so với yêu cầu của RSA nhưng vẫn đảm bảo được độ an toàn tương đương với chi phí và tài nguyên tính toán thấp hơn. Điều này khiến nó phù hợp hơn cho các ứng dụng di động hoặc tài nguyên thấp hơn so với RSA.

# data[].attributes.body
*Mã hóa

Giả sử Bình muốn gửi đoạn thông tin M cho An. Đầu tiên Bình chuyển M thành một số m < n theo một hàm có thể đảo ngược (từ m có thể xác định lại M) được thỏa thuận trước. Quá trình này được mô tả ở phần #Chuyển đổi văn bản rõ.

Lúc này Bình có m và biết n cũng như e do An gửi. Bình sẽ tính c là bản mã hóa của m theo công thức:

c = m^e mod n

Hàm trên có thể tính dễ dàng sử dụng phương pháp tính hàm mũ (theo môđun) bằng (thuật toán bình phương và nhân) Cuối cùng Bình gửi c cho An.

*Giải mã

An nhận c từ Bình và biết khóa bí mật d. An có thể tìm được m từ c theo công thức sau:

m = c^d mod n

Biết m, An tìm lại M theo phương pháp đã thỏa thuận trước. Quá trình giải mã hoạt động vì ta có

c^d ≡ (m^e)^d ≡ m^ed (mod n)

Do ed ≡ 1 (mod p-1) và ed ≡ 1 (mod q-1), (theo Định lý Fermat nhỏ) nên:

m^ed ≡ m (mod p)

và

m^ed ≡ m (mod q)

Do p và q là hai số nguyên tố cùng nhau, áp dụng định lý số dư Trung Quốc, ta có:

m^ed ≡ m (mod pq)

hay:

c^d ≡ m (mod n)

# data[].attributes.body
Một ví dụ khác về hệ mật mã khóa công khai cũng thường đang được sử dụng, đặc biệt là trong các hệ thống blockchain và tiền mã hóa hiện nay là các hệ mật mã dựa trên đường cong Elliptic (ECC). Đây là hệ mật mã khóa công khai đang được nhiều chuyên gia bảo mật ưu tiên thay thế cho RSA.

# data[].attributes.body
RSA là thuật toán mã hóa khóa công khai được sử dụng rộng rãi nhất hiện nay. Nó được nhúng trong các giao thức SSL/TSL được sử dụng để đảm bảo tính bí mật cho các liên lạc qua mạng máy tính.

RSA được xây dựng dựa trên độ khó của bài toán phân tích số nguyên thành tích hai số nguyên tố lớn.

# data[].attributes.body
Bao gồm các bước:

1. Khởi động vòng lặp

1. AddRoundKey — Mỗi cột của trạng thái đầu tiên lần lượt được kết hợp với một khóa con theo thứ tự từ đầu dãy khóa.

2. Vòng lặp

1. SubBytes — đây là phép thế (phi tuyến) trong đó mỗi byte trong trạng thái sẽ được thế bằng một byte khác theo bảng tra (Rijndael S-box).

2. ShiftRows — dịch chuyển, các hàng trong trạng thái được dịch vòng theo số bước khác nhau.

3. MixColumns — quá trình trộn làm việc theo các cột trong khối theo một phép biến đổi tuyến tính.

4. AddRoundKey

3. Vòng lặp cuối

1. SubBytes

2. ShiftRows

3. AddRoundKey

Tại chu trình cuối thì bước MixColumns không thực hiện.

# data[].attributes.body
Thuật toán của DES đã gây ra rất nhiều tranh cãi, do nó bao gồm các thành phần thiết kế mật, độ dài khóa tương đối ngắn, và các nghi ngờ NSA có thể bẻ khóa. Do đó, DES đã được giới nghiên cứu xem xét rất kỹ lưỡng, việc này đã thúc đẩy hiểu biết hiện đại về mật mã khối (block cipher) và các phương pháp thám mã tương ứng.

Hiện nay DES được xem là không đủ an toàn cho nhiều ứng dụng. Nguyên nhân chủ yếu là độ dài 56 bit của khóa là quá nhỏ. Khóa DES đã từng bị phá trong vòng chưa đầy 24 giờ. Đã có rất nhiều kết quả phân tích cho thấy những điểm yếu về mặt lý thuyết của mã hóa có thể dẫn đến phá khóa, tuy chúng không khả thi trong thực tiễn.

# data[].attributes.body
AES chỉ làm việc với các khối dữ liệu (đầu vào và đầu ra) 128 bít và khóa có độ dài 128, 192 hoặc 256 bít. Các khóa con sử dụng trong các chu trình được tạo ra bởi quá trình tạo khóa con Rijndael. Mỗi khóa con cũng là một cột gồm 4 byte. 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 128 bit đầu vào được chia thành 16 byte (mỗi byte 8 bit),có thể xếp thành 4 cột, mỗi cột 4 phần tử hay là một ma trận 4x4 của các byte, nó được gọi là ma trận trạng thái, hay trạng thái. Trong quá trình thực hiện thuật toán các toán tử tác động để biến đổi ma trận trạng thái này.

# data[].attributes.headline
Mật Mã Hóa Khóa Công Khai - Public-key Cryptography (PKC)

# data[].attributes.subject
Mật Mã Hóa Khóa Công Khai - Public-key Cryptography (PKC)

# data[].attributes.body
Các hệ mật mã khóa công khai là các thành phần cơ bản trong các hệ thống, ứng dụng và giao thức tiền điện tử hiện đại giúp đảm bảo tính bí mật, tính xác thực và chống chối bỏ trong việc truyền tải và lưu trữ dữ liệu. Chúng là nền tảng cho nhiều giao thức trên Internet, như SSL/TLS, S/MIME, SSH  PGP, hay GPG. Một số thuật toán khóa công khai ứng dụng trong việc phân phối khóa bí mật (giao thức trao đổi khóa Diffie–Hellman), hay chữ ký số (RSA, ECC).
Ngoài ra mật mã khóa công khai còn được sử dụng để tạo tính xác thực cho dữ liệu thông quan việc sử dụng chữ ký số.

# data[].attributes.body
Ứng dụng điển hình của mật mã khóa công khai là xác thực dữ liệu thông qua việc sử dụng chữ ký số. Chữ ký số thực chất là một chuỗi nhị phân đặc trưng cung cấp tính toàn vẹn, bằng chứng về nguồn gốc, danh tính và trạng thái của một tài liệu, giao dịch hoặc thông điệp điện tử. Chúng được sử dụng rộng rãi trong nhiều giao thức cho mục đích xác thực và đã được chứng minh là rất hữu ích và an toàn.

# data[].attributes.headline
Các Thuật Toán Mã Hóa Bất Đối Xứng - Asymmetric Encryption Algorithms

# data[].attributes.subject
Các Thuật Toán Mã Hóa Bất Đối Xứng - Asymmetric Encryption Algorithms

# data[].attributes.body
Mật mã khóa công khai sử dụng cặp khóa chung và khóa riêng để mã hóa và giải mã dữ liệu. Khóa chung có thể được chia sẻ với mọi người và được gọi là khóa công khai. Khóa riêng được giữ bí mật và chỉ riêng chủ sở hữu biết. Một trong hai khóa có thể được sử dụng để mã hóa và khi đó khóa còn lại được sử dụng để giải mã. Hai khóa này khác nhau và từ một khóa không thể (hoặc rất khó) suy ra được khóa còn lại.

# data[].attributes.headline
Các Thuật Toán Mã Hóa Đối Xứng - Symmetric Encryption Algorithms

# data[].attributes.subject
Các Thuật Toán Mã Hóa Đối Xứng - Symmetric Encryption Algorithms

# data[].attributes.body
Các thuật toán mã khối mã hóa các khối thông tin có độ dài cố định gồm tập hợp nhiều bit hoặc đơn vị cơ bản của thông tin với khóa bí mật mà chỉ có người gửi và người nhận biết.
Phức tạp: Thiết kế đơn giản
bit được sử dụng: 64 bit trở lên
Nhầm lẫn và khuếch tán (Confusion vs Diffusion): Sử dụng cả nhầm lẫn và khuếch tán
Các chế độ thuật toán được sử dụng: ECB (Sách mã điện tử),
CBC (Chuỗi khối mã hóa)
Sự đảo ngược (Decoded): Đảo ngược văn bản được mã hóa là khó
Thực hiện: Mật mã Feistel

# data[].attributes.body
Căn bản: Chuyển đổi văn bản bằng cách lấy một byte của văn bản đơn giản tại một thời điểm.
Phức tạp: Phức tạp tương đối
bit được sử dụng: 8 bit
Nhầm lẫn và khuếch tán (Confusion vs Diffusion): Chỉ dựa vào nhầm lẫn
Các chế độ thuật toán được sử dụng: CFB (Phản hồi mật mã), OFB (Phản hồi đầu ra)
Sự đảo ngược (Decoded): Nó sử dụng XOR để mã hóa có thể dễ dàng đảo ngược thành văn bản thuần túy.
Thực hiện: Mật mã Vernam

# data[].attributes.headline
Mô hình đơn giản sử dụng mã xác thực thông điệp

# data[].attributes.subject
Mô hình đơn giản sử dụng mã xác thực thông điệp

# data[].attributes.body
Để tạo ra MAC, người ta có thể sử dụng hàm băm (hash function) thu gọn thông điệp đến kích thước cần thiết và dùng giá trị băm này kiểm soát tính toàn vẹn của thông điệp. Các hàm băm không sử dụng giá trị bí mật chia sẻ giữa người gửi và người nhận nên có ứng dụng rộng rãi hơn.

Như vậy, mã xác thực thông điệp chính là một kỹ thuật sử dụng khóa bí mật để tạo ra một khối bit độ dài cố định, gọi là checksum hoặc MAC,  sau đó, khối này được ghép vào thông điệp để gửi cho người nhận nhằm xác thực thông điệp đính kèm.

Giả sử A và B có chung một khóa bí mật K. Khi A cần gửi thông điệp xác thực M cho B, A tính: MAC = CK(M), với CK là hàm công khai sử dụng khoá K. Sau đó, MAC được gửi kèm với thông điệp M cho B.

B nhận được MAC và thông điệp M‟. B tính MAC‟ = CK(M‟); và so sánh,  nếu  MAC  =  MAC‟  thì  B  có  thể  khẳng  định  M  =  M‟,  tức  là  M  đã không bị thay đổi trên đường truyền và A là người gửi thông điệp M (Ở đây ta giả sử chỉ có A và B biết khóa K).

# data[].attributes.headline
Xác Thực Thông Điệp - Message Authentication

# data[].attributes.subject
Xác Thực Thông Điệp - Message Authentication

# data[].attributes.body
Xác thực thông điệp là một cơ chế cho phép chúng ta có thể kiểm soát tính toàn vẹn của thông điệp.
Xác thực một thông điệp tức là chúng ta phải bảo đảm trong quá trình truyền thông, thông điệp tại đầu nhận phải giống y hệt như khi nó được gửi đi.
Điều đó có nghĩa là phải kiểm soát được thông điệp có bị sửa đổi, thêm bớt, tẩy xoá hoặc lặp lại trong quá trình trao đổi trên đường truyền hay không.
Xác thực thông điệp còn phải kiểm tra được tính hợp lệ của người gửi.
Tóm lại, xác thực một thông điệp bao gồm các thành phần sau:

Kiểm tra tính toàn vẹn của thông điệp;

Xác nhận tính hợp lệ của người gửi.

# data[].attributes.headline
Thuật Toán Tạo Mã Xác Thực Thông Điệp - Message Authentication Code (MAC)

# data[].attributes.subject
Thuật Toán Tạo Mã Xác Thực Thông Điệp - Message Authentication Code (MAC)

# data[].attributes.body
Mã xác thực thông điệp (MAC) là một chuỗi bit được gửi kèm với thông điệp. Chuỗi bit này được tạo ra bởi một hàm của thông điệp và khóa bí mật, chỉ có người gửi và người nhận biết. Độ dài thông điệp có thể tùy ý, còn MAC thường có độ dài cố định (ví dụ 128 bit).

# data[].attributes.body
- Tính chất cơ bản của hàm băm mật mã là tính một chiều. Nghĩa là, một hàm mà trên thực tế không thể có ngược. Nếu bạn có một giá trị băm đầu ra, bạn sẽ không thể suy ngược lại được giá trị đầu vào là gì để có thể băm ra một thông điệp băm như vậy, hoặc ít nhất là rất khó suy luận được ra, trừ khi bạn vét cạn hết toàn bộ các khả năng có thể của thông điệp đầu vào. Đây là tính chất vô cùng quan trọng của hàm băm mật mã biến nó thành một công cụ cơ bản của mật mã hiện đại.

# data[].attributes.headline
Phương pháp đồng dư tuyến tính - Linear Congruential Method

# data[].attributes.subject
Phương pháp đồng dư tuyến tính - Linear Congruential Method

# data[].attributes.body
Với phương pháp này ta cần các đại lượng sau:

- Hệ số a (multiplier)

- Số gia c (increment)

- Môđun m (modulus)

- Giá trị ban đầu X0

Các số tiếp theo của dãy được tạo ra bằng công thức:
Xi+ 1= (aXi+ c) mod m

Theo công thức trên các số được sinh ra sẽ nằm trong khoảng [0; m- 1].
Hơn nữa, việc chọn các đại lượng trên sẽ ảnh hưởng lớn đến chu kỳ dãy cũng như sự phân bố các số. Để có chu kỳ lớn nhất, người ta dựa vào các điều kiện của Hull và Dobell. Đồng thời, các số m được chọn thường khá lớn và là (hoặc gần với) một lũy thừa của 2 để tăng chu kỳ lặp và thuận lợi khi chạy chương trình.
Vì có thể khắc phục nhiều nhược điểm của dãy ngẫu nhiên sinh ra, phương pháp này được sử dụng khá phổ biến.

# data[].attributes.headline
Phương pháp bình phương giữa - Midsquare Method

# data[].attributes.subject
Phương pháp bình phương giữa - Midsquare Method

# data[].attributes.body
Đây là một trong số những phương pháp đầu tiên được nghĩ ra cho việc tạo số giả ngẫu nhiên được đề xuất vào những năm 1940.
Để dễ hiểu hơn ta lấy việc tạo số ngẫu nhiên có 4 chữ số (các chữ sô đầu có thể bằng 0) làm minh họa. Gọi giá trị ban đầu là Z0. Số tiếp theo trong dãy sẽ thu được bằng cách sau: lấy Z0 bình phương tạo ra một số có 8 chữ số (nếu không đủ thì thêm vào trước các số 0 cho đến khi đủ) sau đó lấy 4 chữ số ở giữa số mới nhận được này và đặt đó là số tiếp theo Z1.

Ví dụ Z0=  7182 ⇒ Z0^2= 51581124 ⇒ Z1= 5811

Tuy nhiên, trong phương pháp này các số tạo ra có chu kỳ tương đối ngắn và thường có xu hướng tiến về 0.

# data[].attributes.body
- Thứ nhất, nếu chọn giá trị ban đầu không tốt sẽ dẫn đến nhiều sai hỏng đáng kể như chu kỳ lặp lại bị giảm.
- Thứ hai, sử dụng thuật toán tạo số không đủ tốt cũng sẽ có kết quả không như mong muốn, ví dụ như tạo mật mã không tốt sẽ dễ bị hack.
- Ngoài ra một dãy giả ngẫu nhiên sẽ có sự phân bố các số không đồng đều, tức là có những số dễ xuất hiện hơn số khác, nên không thể dùng làm số liệu cho nghiên cứu, thống kê.

=> Vì vậy, việc sử dụng PRNG hay TRNG cần phải xem xét tính chất công việc ấy. Đồng thời, một trong những cách cải thiện hiệu quả của PRNG là phát triển thuật toán tốt hơn.

# data[].attributes.body
- Thứ nhất, các PRNG có thể tạo ra số lượng lớn các số trong thời gian tương đối ngắn trong khi các TRNG phải mất tương đối lâu để tạo.
- Thứ hai, một số TRNG sử dụng số liệu từ các nguồn ngẫu nhiên có thể bị điều chỉnh theo ý muốn (như vị trí chuột hay thời gian hiện tại trong máy) sẽ tại ra các số không hẳn là “ngẫu nhiên”. Còn các TRNG sử dụng nguồn số liệu khó bị thao túng hơn như tạp nhiễu nhiệt (thermal noise), hoặc bức xạ vũ trụ sẽ cần đến các thiết bị phức tạp hơn đồng thời sẽ làm cho giá thành của các TRNG này cao hơn.
- Hơn nữa, nếu chọn giá trị ban đầu đủ tốt và dãy có chu kỳ lặp lại đủ lớn, ta gần như không thể phân biệt giữa dãy giả ngẫu và dãy thực sự ngẫu nhiên.

# data[].attributes.body
PRNG là các hàm bắt đầu từ một số entropy ban đầu (seed) và tính số ngẫu nhiên tiếp theo bằng một số tính toán không thể đoán trước mà không biết seed.

# data[].attributes.body
Trình tạo số giả ngẫu nhiên (PRNG) được sử dụng để tăng kích thước một lượng nhỏ ngẫu nhiên ban đầu thành một số lượng lớn ngẫu nhiên, thường được sử dụng trong các hệ thống mật mã.

# data[].attributes.headline
Bộ Sinh Số Ngẫu Nhiên Thực Sự - True Random Number Generator (TRNG)

# data[].attributes.subject
Bộ Sinh Số Ngẫu Nhiên Thực Sự - True Random Number Generator (TRNG)

# data[].attributes.headline
Bộ Sinh Số Giả Ngẫu Nhiên - Pseudorandom Number Generator (PRNG)

# data[].attributes.subject
Bộ Sinh Số Giả Ngẫu Nhiên - Pseudorandom Number Generator (PRNG)

# data[].attributes.attachment_caption
SHA-3 sử dụng cấu trúc bọt biển cho các hàm băm

# data[].attributes.body
Kích thước digest: Bất kỳ
SHA-3 sử dụng cấu trúc bọt biển, trong đó dữ liệu được "hấp thụ" vào miếng bọt biển, sau đó kết quả được "ép" ra ngoài. Trong giai đoạn hấp thụ, các khối thông báo được XOR thành một tập hợp con của trạng thái, sau đó được chuyển đổi thành một tập hợp toàn bộ bằng cách sử dụng một hàm hoán vị f. Trong giai đoạn "bóp", các khối đầu ra được đọc từ cùng một tập con của trạng thái, xen kẽ với hàm chuyển đổi trạng thái f. Kích thước của phần trạng thái được ghi và đọc được gọi là "tỷ lệ" (được ký hiệu là r và kích thước của phần không bị tác động bởi đầu vào
Các biến thể: SHA3-224, SHA3-256, SHA3-384, SHA3-512, SHAKE128, SHAKE256

SHAKE128("The quick brown fox jumps over the lazy dog", 256)
f4202e3c5852f9182a0430fd8144f0a74b95e7417ecae17db0f8cfeed0e3e66e
SHAKE128("The quick brown fox jumps over the lazy dof", 256)
853f4538be0db9621a6cea659a06c1107b1f83f02b13d18297bd39d7411cf10c

# data[].attributes.body
Kích thước digest: 224, 256, 384, or 512 bits
Biến thể: SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256
Đối với một hàm băm mà L là số bit trong bản tóm tắt thông báo, việc tìm kiếm một thông báo tương ứng với một bản tóm tắt thông báo đã cho luôn có thể được thực hiện bằng cách sử dụng tìm kiếm brute force trong các đánh giá 2L.

Minh họa:

SHA224("The quick brown fox jumps over the lazy dog")
0x 730e109bd7a8a32b1cb9d9a09aa2325d2430587ddbc0c38bad911525
SHA224("The quick brown fox jumps over the lazy dog.")
0x 619cba8e8e05826e9b8c519c0a5c68f4fb653e8a3d8aa04bb2c8cd4c

# data[].attributes.body
Kích thước digest: 160 bit
SHA-1 tạo ra một bản tóm tắt thông báo dựa trên các nguyên tắc tương tự như những nguyên tắc được Ronald L. Rivest của MIT sử dụng trong việc thiết kế các thuật toán thông báo thông điệp MD2, MD4 và MD5, nhưng tạo ra một giá trị băm lớn hơn (160 bit so với 128 bit).
Minh họa:

SHA1("The quick brown fox jumps over the lazy dog")

Outputted hexadecimal: 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12

Outputted Base64 binary to ASCII text encoding: L9ThxnotKPzthJ7hu3bnORuT6xI=

SHA1("The quick brown fox jumps over the lazy cog")

Outputted hexadecimal: de9f2c7fd25e1b3afad3e85a0bd17d9b100db4b3

Outputted Base64 binary to ASCII text encoding: 3p8sf9JeGzr60+haC9F9mxANtLM=

# data[].attributes.attachment_caption
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ụ.

# data[].attributes.body
-Kích thước digest: 128 bit
-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.
- Minh họa:

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

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

# data[].attributes.body
Duy trì tính toàn vẹn cho dữ liệu trong mật mã. Biến đổi một đầu vào có độ dài bất kỳ về dữ liệu có một đầu ra với độ dài xác định đại diện cho dữ liệu đó

# data[].attributes.headline
Các Thuật Toán Sinh Số Ngẫu Nhiên - Random Number Generator Algorithms

# data[].attributes.subject
Các Thuật Toán Sinh Số Ngẫu Nhiên - Random Number Generator Algorithms

# data[].attributes.body
Là thành phần cốt yếu để đảm bảo độ an toàn cho hệ mật

# data[].attributes.body
Sử dụng một cặp khóa bao gồm khóa chung (công khai) và khóa riêng (bí mật)

# data[].attributes.body
Sử dụng một khóa chung cho cả việc mã hóa và giải mã.
Các thuật toán dạng này được chia thành các thuật toán tạo mã xác thực thông điệp (MAC) và các thuật toán mã hóa khóa đối xứng.

# data[].attributes.body
Các thuật toán không sử dụng khóa bao gồm các thuật toán sinh số ngẫu nhiên và hàm băm.

# data[].attributes.body
Các thuật toán mã hóa có thể được chia thành 3 dạng chính: các thuật toán không sử dụng khóa, các thuật toán sử dụng khóa đối xứng và các thuật toán sử dụng khóa bất đối xứng.

# data[].attributes.body
Giải mã là quá trình ngược lại, phục hồi lại văn bản rõ từ văn bản mã.

# data[].attributes.body
Mã hóa là quá trình chuyển đổi các thông tin thông thường (văn bản rõ) thành dạng không đọc trực tiếp được, gọi là văn bản mã hóa.

# data[].attributes.body
Là một lĩnh vực liên quan đến các kỹ thuật ngôn ngữ và toán học để đảm bảo an toàn thông tin, cụ thể là trong thông tin liên lạc