You are on page 1of 9

LAB #8 : SHA ALGORITHM

Course Name: CRY302


Student Name: TRAN THANH HUNG
Instructor Name: HO HAI VAN
Lab Due Date:
1) Dựa trên Chapter 11 - Cryptographic Hash Functions của sách tham khảo Cryptography and
Network Security Principles and Practice (2014).pdf [1], giải thích bằng tiếng Viê ̣t ngắn gọn nguyên lý
hoạt đô ̣ng về ứng dụng hàm băm cho viê ̣c xác thực thông tin của 4 ví dụ (a), (b), (c), (d) của Figure 11.3
trong Chapter 11 này. (4 điểm)
Chú ý:
- Giải thích mỗi ví dụ không quá 10 dòng (với font size là 11)
- Nói được mục đích, ưu điểm và khuyết điểm của mỗi ví dụ

- K là khóa bí mật mà chỉ có bạn và người được gửi biết


- M là dữ liệu của bạn muốn gửi và đã được mã hóa, sau đó khóa lại với khóa
K
- Bên B sẽ nhận được 1 bản được mã hóa E(K, [M || H(M)])
- Sau đó ta sẽ mở khóa nó với khóa K để được E(M || H(M))
- Ta sẽ mã hóa M và sẽ so sánh với H(M)
- Nêu như cả 2 giống nhau thì tính toàn vẹn của M đã được đảm bảo
 Mục đích
- Tăng độ bảo mật cho dữ liệu
 Ưu Điểm
- Vì sử dụng mã hóa 2 chiều để gửi đi nên dù có ai bắt được thì cũng không
thể xem được có gì bên trong.
 Khuyết Điểm
- K là khóa bí mật mà chỉ có bạn và người được gửi biết
- M là dữ liệu của bạn muốn gửi và đã được Hash
- Sau đó khóa lại với khóa K và gửi cho bên B
- Lúc này bên B nhận được M và E(K, H(M))
- Bước đầu tiên ta sẽ Hash M
- Sau đó ta mở khóa E(K, H(M)) với khóa K, ta sẽ được H(M)
- Cuối cùng ta so sánh 2 kết quả lại với nhau
- Nếu như cả 2 giống nhau thì tính toàn vẹn của M đã được đảm bảo

 Mục đích
- Chỉ Hash được mã hóa, và sử dụng mã hóa đối xứng. Giảm gánh nặng xử lý
cho những ứng dụng không cần bảo mật

 Ưu Điểm

- Vì sử dụng mã hóa 2 chiều để gửi đi nên dù có ai bắt được thì cũng không
thể xem được có gì bên trong.

 Khuyết Điểm
- Áp dụng Hash cho M gửi đi, nhưng khi qua bên B, vẫn sẽ nhận được 1 bản
rõ của M, nên vẫn sẽ có cơ hội để hacker bắt được và sửa chữa nội dung.
- Vì ta vẫn phải dùng Key của A để giải mã nên ai có được Key này thì vẫn
có thể giải mã được M
- Lúc đầu A và B chia sẽ một giá trị S bí mật
- A sẽ gửi Message + S và Hash nó rồi gửi cho B
- Bên B bởi vì có sở hữu giá trị S nên có thể tính toán lại được giá trị Hash
- Sau đó so sánh với kết quả được nhận ban đầu để xác minh kết quả

Mục đích
- Không cần mã hóa để xác thực tin nhắn
Ưu Điểm
- Vì chỉ có A và B biết giá trị S nên rất khó để người khác có thể chặn và tạo
ra một thông điệp sai

Khuyết Điểm
- A và B phải thống nhất về một giá trị S trước đó
- Lúc đầu A và B chia sẽ một giá trị S bí mật
- A sẽ gửi Message + S và Hash nó
- Sau đó sẽ Encrypt nó với SECRET KEY và gửi cho B
- Bên B khi nhận được sẽ Decypt gói tin với SECRET KEY
- Tương tự bên B bởi vì có sở hữu giá trị S nên có thể tính toán lại được giá trị
Hash
- Sau đó so sánh với kết quả được nhận ban đầu để xác minh kết quả

Mục đích
- Đưa thêm tính bảo mật vào phương pháp
Ưu Điểm
- Vì chỉ có A và B biết giá trị S nên rất khó để người khác có thể chặn và tạo
ra một thông điệp sai
- Thêm một lớp bảo mật với SECRET KEY nữa khiến cho gói tin càng an
toàn

Khuyết Điểm
- A và B phải thống nhất và nhớ kỹ về hai giá trị S và SECRET KEY
2) Dựa trên Chapter 11 - Cryptographic Hash Functions của sách tham khảo Cryptography and
Network Security Principles and Practice (2014).pdf [1], giải thích bằng tiếng Viê ̣t ngắn gọn nguyên lý
hoạt đô ̣ng về ứng dụng hàm băm cho chữ ký số của 2 ví dụ (a), (b), (c), (d) của Figure 11.4 trong
Chapter 11 này. (4 điểm)
Chú ý:
- Giải thích mỗi ví dụ không quá 10 dòng (với font size là 11)
- Nói được mục đích, ưu điểm và khuyết điểm của mỗi ví dụ

- Message được Hash


- Sau đó Encrypt với Private Key của A
- Message và thông điệp được Encrypt được gửi cho B
- Bên B sẽ thực hiện 2 bước
o Đầu tiên sẽ Hash Message
o Sau đó sẽ Decrypt thông điệp Encrypt với Public Key A
- Cuối cùng so sánh 2 kết quả ra được, nếu bằng nhau thì thông điệp được gửi
trọn vẹn, ko thì nó đã được chỉnh sửa
 Ưu điểm
 Nhược điểm
- Trong gói thông tin chuyển đi vẫn chưa được mã hóa hoàn toàn, vẫn có thể
lộ thông tin nếu gói tin bị bắt lại
- Vì sử dụng Public key của A nên mọi người trong network vẫn có thể giải
mã được thông điệp

- Message được Hash


- Sau đó Encrypt với Private Key của A
- Message và thông điệp được Encrypt được Encrypt lần nữa với SECRET
KEY mà chỉ A và B biết
- Khi bên B nhận được thông điệp đó thì sẽ Decrypt bước đầu với SECRET
KEY
- Sau đó Bên B sẽ thực hiện 2 bước
o Đầu tiên sẽ Hash Message
o Sau đó sẽ Decrypt thông điệp Encrypt với Public Key A
- Cuối cùng so sánh 2 kết quả ra được, nếu bằng nhau thì thông điệp được gửi
trọn vẹn, ko thì nó đã được chỉnh sửa
 Ưu điểm
- Tính bảo mật được nâng cao, và đây cũng là cách phổ biến được sử dụng
- Dù cho có bị người khác trong mạng bắt được cũng khó mà giải mã được nó
 Nhược điểm
3) Dựa vào website tài liêụ [2], viết lại chương Python thỏa mãn lần lượt các điều kiêṇ sau: (2 điểm)
- Có menu chọn 2 loại giải thuâ ̣t hash: SHA-2 hoă ̣c SHA-3
- Trong mỗi loại giải thuâ ̣t hash, có thể chọn tiếp chiều dài hash (224, 256, …)
- Sau đó, có thể nhâ ̣p vào thông điêp̣ cần hash
Chú ý: Để minh họa chương trình này, SV cần nhâ ̣p vào Tên SV của mình làm thông điêp̣
cần hash. Thí dụ Nguyen Van Tuan.
Chú ý: lưu lại hình ảnh minh họa kết quả chương trình chạy làm minh chứng.
Hình dưới đây minh họa cách sử dụng hàm hash với chiều dài hash 224 bit, thông điê ̣p Tên
SV và giá trị hash được sinh ra.
- Demo SHA-2 độ dài 256 bit.

- Demo SHA-3 với độ dài 224 và 256 bit.


- Source code:

from Crypto.Hash import SHA3_224


from Crypto.Hash import SHA224
from Crypto.Hash import SHA256
from Crypto.Hash import SHA3_256

if __name__ == '__main__':
while True:
print('SHA')
print('1.SHA-2')
print('2.SHA-3')
print("3.Exit")
print('--------------------------------------------------')
try:
choice = int(input('Enter your Choice:'))
if (choice == 1):
while True:

print('1.SHA224')
print('2.SHA256')
print('3.Exit')
cho = int(input('Enter your Choice:'))
if (cho == 1):
h_obj = SHA224.new()
n = input("Input Name: ")
h_obj.update(n.encode())
print(h_obj.hexdigest())
elif (cho == 2):
h_obj = SHA256.new()
n = input("Input Name: ")
h_obj.update(n.encode())
print(h_obj.hexdigest())
else:
break
elif (choice == 2):
while True:

print('1.SHA3-224')
print('2.SHA3-256')
print('3.Exit')
cho = int(input('Enter your Choice:'))
if (cho == 1):
h_obj = SHA3_224.new()
n = input("Input Name: ")
h_obj.update(n.encode())
print(h_obj.hexdigest())
elif (cho == 2):
h_obj = SHA3_256.new()
n = input("Input Name: ")
h_obj.update(n.encode())
print(h_obj.hexdigest())
else:
break
elif(choice == 3):
break
except:
print('Lỗi Cú Pháp.')

TÀI LIỆU ĐÍNH KÈM


[1] File sách tham khảo: Cryptography and Network Security Principles and Practice (2014).pdf
[2] Website tài liê ̣u: https://pycryptodome.readthedocs.io/en/latest/src/hash/hash.html
[3] File source: Test_SHA-224.py

You might also like