Những bài viết trên blog được viết ra chủ yếu ghi nhận lại kiến thức, không nhằm diễn giải cho bất kỳ cá nhân nào. Nếu đọc không hiểu hay quá nhiều từ ngữ, thuật ngữ tiếng Anh của ngành mà bạn không hiểu, thì kệ bạn =)))))

HASH LÀ GÌ?

Hash là phương thức phát hiện sự tương đồng về mặt cấu trúc giữa hai khối dữ liệu. Hash function – hay còn dịch ra với nghĩa thông dụng là Hàm băm – là một hàm được thiết kế không cho phép đảo ngược, chức năng của nó là để khởi tạo một một chuỗi dộc nhất không trùng lắp cho bất kỳ khối dữ liệu nào. Khối dữ liệu tôi đang nói tới ở đây có thể là bất cứ loại data gì: files, strings, streams hoặc bất kỳ khối data nào khác có thể được biểu diễn theo dạng nhị phân.

Chắc chắn nếu đã từng đi tải phần mềm, dữ liệu này nọ trên mạng thì không dưới 1 lần bạn bắt gặp các chuỗi băm được đính kèm trong các trang Download. Lấy ví dụ một cái thông dụng nhất mà chắc chắn ai cũng từng vọc đến, đó là Kali Linux. Tiền thân của nó là BackTrack đấy, không hiểu vì sao nó lại đổi tên. Với một bản linux chuyên dụng cho dân hacking, nhà phát triển phải đảm bảo các bản ISO mà bạn tải về từ phía họ cung cấp phải hoàn toàn nguyên vẹn không bị thay đổi gì trong cấu trúc nó hết. Chính vì vậy mà nó có kèm theo cái SHA-256 checksum đi kèm mỗi bản đấy.

Nếu tải file ảnh đĩa này về, bạn cũng nên thực hiện hash với cái bản mà bạn vừa tải thành công để so sánh chuỗi hash với nhà sản xuất. Nếu nó trùng lắp, thì nghĩa là bạn đã tải đúng bản gốc không bị can thiệp sửa đổi gì trong quá trình tải. Nói một cách ngắn gọn, trùng mã hash nghĩa là bạn vừa lấy được hàng original. Hehehe…

NHƯNG… LÀM SAO ĐỂ HASH MÀ KIỂM TRA?

Đó chính là trọng tâm của bài viết này. Bắt tay vào vấn đề chuyên môn thôi, nói dông dài nhiều quá. Lưu ý là tôi không giải thích cụ thể cơ chế của hash function nó hoạt động như thế nào ở bài viết này đâu. Nếu muốn, bạn có thể tự tra tìm tài liệu trên mạng và tham khảo, hoặc đọc bài viết ở đây để tham khảo cũng được.

Ta bắt tay thực hiện. Đầu tiên bạn phải cài Python 2 vào máy (nếu sử dụng Windows). Tôi dùng Linux Mint nên nó có sẵn rồi, khỏi mắc công cài đặt cấu hình này nọ.

Ta tiến hành import thư viện Python cần thiết để thực hiện công việc này.

import hashlib as hash

Bây giờ tới bước chọn giải thuật băm. Muốn hiểu kĩ hơn, đọc thật sâu và chi tiết bài viết được giới thiệu ở chỗ phía trên của bài viết này.

sha = hash.sha256()

Hai dòng phía trên chỉ mới thiết lập chung chung để bắt đầu công việc thôi. Giờ bắt tay vào hash cho biết nè. Ta thử với chuỗi ‘Hello World!’ trước

# Nhập vào chuỗ mà mình muốn hash

sha.update(‘Hello World!’)

# In ra màn hình dạng thập lục phân của dạng băm nhị phân mà ta vừa thực hiện

print sha.hexdigest()

# Kết quả ở đây

“””

7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069

“””

Như vậy, ta biết được dạng hash SHA-256 của chuỗi ‘Hello World!’ là 7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069.

Tương tự, ta sẽ làm thêm việc băm này một lần nữa, để chứng minh tính không toàn vẹn của dữ liệu gốc ban đầu có thể dẫn đến việc cho ra mã băm sai. Ta thực hiện lệnh sau:

# Lúc này chuỗi đã bỏ bớt đi dấu chấm than ở cuối từ rồi nhé.

sha.update(‘Hello World’)

# In ra kết quả

print sha.hexdigest()

“””

a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e

“””

Vậy thì bây giờ, bạn cũng có thể tự kiểm tra hash SHA256 của file mà mình tải về rồi.

import hashlib as hash

# Specify how many bytes of the file you want to open at a time

BLOCKSIZE = 65536

sha = hash.sha256()

with open(‘kali.iso’, ‘rb’) as kali_file:

file_buffer = kali_file.read(BLOCKSIZE)

while len(file_buffer) > 0:

sha.update(file_buffer)

file_buffer = kali_file.read(BLOCKSIZE)

print sha.hexdigest()

Nếu vẫn chưa hiểu, bạn có thể xem video minh hoạ ở đây.

VÕ TÌNH THƯƠNG

votinhthuong9@gmail.com

Advertisements