Chương 1 TỔNG QUAN VỀ BLOCKCHAIN 1.1 Giới thiệu chung về công nghệ Blockchain: Blockchain là công nghệ chuỗi – khối, cho phép truyền tải dữ liệu một cách an toàn dựa trên hệ thống mã hóa vô cùng phức tạp, tương tự như cuốn sổ cái kế toán của một công ty, nơi mà tiền được giám sát chặt chẽ và ghi nhận mọi giao dịch trên mạng ngang hàng. Mỗi khối (block) đều chứa thông tin về thời gian khởi tạo và được liên kết với khối trước đó, kèm theo đó là một mã thời gian và dữ liệu giao dịch. Dữ liệu khi đã được mạng lưới chấp nhận thì sẽ không có cách nào thay đổi được. Blockchain được thiết kế để chống lại việc gian lận, thay đổi của dữ liệu.
Sau này đồng tiền Bitcoin và các đồng tiền khác tương tự được phát hành, thì công nghệ Blockchain là nền tảng giúp việc xử lý các giao dịch tiền tệ.2 Lý thuyết căn bản về Blockchain Công nghệ Blockchain được xây dựng trên hai nền tảng kỹ thuật là hàm băm và chữ ký số. Khi tìm hiểu về hoạt động Blockchain ta cần phải nghiên cứu kỹ về hai kỹ thuật này.1 Hàm băm Hàm băm [1] dùng để chuyển đổi từ một thông tin sang một đoạn mã. Bất kỳ nỗ lực gian lận nào để thay đổi bất kỳ phần nào của blockchain sẽ bị phát hiện ngay lập tức vì giá trị băm mới sẽ không phù hợp với thông tin cũ trên blockchain. Bằng cách này, ngành khoa học bảo mật thông tin (cần thiết cho việc mã hóa thông tin và mua sắm trực tuyến, ngân hàng) đã trở thành một công cụ hiệu quả để giao dịch mở.
Hàm băm (hash function) là giải thuật nhằm sinh ra các giá trị băm tương ứng với mỗi khối dữ liệu (có thể là một chuỗi ký tự, một đối tượng trong lập trình hướng đối tượng, v. Giá trị băm đóng vai gần như một khóa để phân biệt các khối dữ liệu, tuy nhiên, người ta chấp hiện tượng trùng khóa hay còn gọi là đụng độ và cố Luan van 6 gắng cải thiện giải thuật để giảm thiểu sự đụng độ đó. Hàm băm thường được dùng trong bảng băm nhằm giảm chi phí tính toán khi tìm một khối dữ liệu trong một tập hợp (nhờ việc so sánh các giá trị băm nhanh hơn việc so sánh những khối dữ liệu có kích thước lớn).1 Cách hoạt động của Hàm Băm [1] Các hàm băm khác nhau sẽ tạo ra các kết quả đầu ra có kích thước khác nhau, nhưng kích thước của các kết quả đầu ra có thể nhận được luôn cố định, không đổi. Ví dụ, thuật toán SHA-256 chỉ có thể tạo ra các kết quả đầu ra có kích thước 256 bit, trong khi thuật toán SHA-1 sẽ luôn tạo ra một kết quả đại diện có kích thước 160-bit.
SHA-256 Đầu vào Đầu ra (256 bit) Binance f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191 binance 59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2 Có thể thấy một thay đổi nhỏ (viết hoa chữ cái đầu tiên) dẫn đến một giá trị băm hoàn toàn khác. Tuy nhiên, do chúng ta đang sử dụng SHA-256, các kết quả đầu ra luôn có kích thước cố định là 256-bit (hoặc 64 ký tự) – cho dù kích thước dữ liệu đầu vào là bao nhiêu. Hai kết quả đầu ra này vẫn giữ nguyên cho dù chúng ta chạy hai từ này qua thuật toán này bao nhiêu lần. SHA-1 Đầu vào Đầu ra (160 bit) Binance 7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1 binance e58605c14a76ff98679322cca0eae7b3c4e08936 SHA là từ viết tắt của Secure Hash Algorithms (Thuật toán Băm Bảo mật).
Đây là một tập hợp các hàm băm mật mã hóa, bao gồm các hàm băm SHA-0, SHA- Luan van 7 1 và các nhóm hàm băm SHA-2 và SHA-3. SHA-256, cùng với SHA-512 và các hàm băm khác, thuộc về nhóm hàm băm SHA-2. Hiện nay, chỉ các nhóm SHA-2 và SHA- 3 được xem là các nhóm hàm băm bảo mật.2 Tính chất của hàm băm mật mã Như đã trình bày ở trên, hàm băm được phân thành 2 loại là hàm băm có khóa và hàm băm không có khóa. Như vậy, khi xét đến tính chất của hàm băm cũng cần phân loại giữa hàm băm có khóa và hàm băm không khóa.
Dưới đây sẽ trình bày về các tính chất cơ bản của hàm băm có khóa và hàm băm không khóa Tính chất của hàm băm không khóa Ngoài hai tính chất cơ bản của hàm băm đã trình bày ở trên, hàm băm không khóa còn có các tính chất sau: - Tính khó tính toán nghịch ảnh: Với bất kỳ giá trị băm h, không thể tính được x sao cho H(x)=h. Hay H được gọi là hàm một chiều. - Tính bền xung đột yếu (weak collision resistance): với bất kỳ giá trị x, không thể tính được y ≠ x sao cho H(y) = H(x). - Tính bền xung đột mạnh (strong collision resistance): Không thể tính được một cặp (x, y) sao cho H(x) = H(y).
- Kháng tiền ảnh (Pre-image resistance): Với một mã băm h bất kỳ, khó tìm được một thông điệp m nào mà h=hash(m). Trong góc độ hàm số toán học, mã băm là ảnh còn thông điệp là tạo ảnh của mã băm, hay gọi là tiền ảnh. Sức kháng cự tấn công từ ảnh ngược về tiền ảnh gọi là kháng tiền ảnh. Một hàm băm có kháng tiền ảnh yếu là lỗ hổng cho các cuộc tấn công tiền ảnh.
- Kháng tiền ảnh thứ hai (Second pre-image resistance) Với một thông điệp m1 bất kỳ, khó tìm được một thông điệp thứ hai m2 sao cho m1 ≠ m2 và hash(m1) = hash(m2). Xác suất xảy ra biến cố có thông điệp m2 như thế tương tự biến cố “Cùng ngày sinh như bạn”. Một hàm băm có kháng tiền ảnh thứ hai yếu là lỗ hổng cho các cuộc tấn công tiền ảnh thứ hai. Luan van 8 Lưu ý: trên đây bài giảng đã trình bày các tính chất cơ bản của hàm băm không khóa.
Tuy nhiên, cần chú ý rằng: trong hàm băm không khóa tồn tại Hàm băm một chiều và Hàm băm chống đụng độ. Trong bài giảng đã tổng hợp các tính chất của cả 2 loại hàm băm này. Chi tiết hơn về các tính chất của hàm băm một chiều và hàm băm chống đụng độ có thể tham khảo trong tài liệu tham khảo của bài giảng. Tính chất của hàm băm có khóa Thuật toán MAC là một họ các hàm Hk (được tham số hoá bằng một khoá bí mật k) có các tính chất sau: - Tính chất nén: với Hk đã biết và giá trị k cho trước và một đầu vào x, thì dễ dàng tính toán được Hk (x) (Hk (x) được gọi là giá trị MAC).
- Tính chất dễ dàng tính toán: Hk ánh xạ một đầu vào x có độ dài bit hữu hạn thì dễ dáng tính được đầu ra Hk (x) có độ dài bit n cố định - Tính khó tính toán: Với các cặp giá trị đầu vào là x và xi với x ≠xi thì không có khả năng tìm được cặp Hk(x) và Hk(xi) thỏa mãn Hk(x) = Hk(xi). Nếu tính chất này không được thỏa mãn thì thông điệp bị coi là giả mạo 1.3 Một số dạng hàm băm Hàm băm MD5 MD5 được Ronald Rivest thiết kế vào năm 1991 để thay thế hàm băm MD4 trước đó và được đưa thành tiêu chuẩn vào năm 1992 trong RFC 1321. MD5 tạo ra một bản tóm tắt có kích thước 128 bit (16 byte). Tuy nhiên, đến đầu những năm 2000 thì hàm băm MD5 trở lên không an toàn trước sức mạnh tính toán của các hệ thống tính toán thế hệ mới.
Với sức mạnh tính toàn và sự phát triển của công nghệ thám mã thời gian gần đây, chúng ta có thể tính toán các va chạm trong MD5 với độ phức tạp 221 phép toán chỉ trong vòng vài giây khiến thuật toán không phù hợp với hầu hết các trường hợp sử dụng trong thực tế. SHA-1 Luan van 9 SHA-1 được phát triển như một phần của dự án Capstone của Chính phủ Hoa Kỳ. Phiên bản đầu tiên, thường được gọi là SHA-0 được xuất bản năm 1993 với tiêu đề Secure Hash Standard, FIPS PUB 180, bởi NIST (Viện Tiêu chuẩn và Công nghệ Quốc gia Hoa Kỳ). Nó đã bị NSA rút lại ngay sau khi xuất bản và được thay thế bởi phiên bản sửa đổi, được xuất bản năm 1995 trong FIPS PUB 180-1 và thường được đặt tên là SHA-1.
SHA-1 tạo ra bản tóm tắt có kích thước 160 bit (20 byte). Các va chạm chống lại thuật toán SHA-1 đầy đủ có thể được tạo ra bằng cách sử dụng tấn công phá vỡ. Do đó, hàm băm này cho đến nay được coi là không đủ an toàn. RIPEMD-160 RIPEMD (viết tắt của RACE Integrity Primitives Evaluation Message Digest) là họ hàm băm được phát triển tại Leuven, Bỉ, bởi ba nhà mật mã học Hans Dobbertin, Antoon Bosselaers và Bart Preneel của nhóm nghiên cứu COSIC thuộc đại học Katholieke Universiteit Leuven.
RIPEMD lần đầu tiên được công bố vào năm 1996 dựa trên các nguyên tắc thiết kế được sử dụng trong MD4. RIPEMD-160 tạo ra một bản tóm tắt gồm 160 bit (20 byte). RIPEMD có hiệu năng tương tự như SHA-1 nhưng ít được phổ biến hơn. Và cho đến nay RIPEMD-160 chưa bị phá vỡ.
Bcrypt Bcrypt là một hàm băm mật khẩu được thiết kế bởi Niels Provos và David Mazières, dựa trên mật mã Blowfish, và được trình bày tại USENIX vào năm 1999. Bên cạnh việc kết hợp một giá trị ngẫu nghiên salt để bảo vệ chống lại các tấn công rainbow attack, bcrypt còn là một hàm có khả năng thích ứng: theo thời gian, số lần lặp có thể được tăng lên để làm cho nó chậm hơn, do đó nó vẫn có khả năng chống lại các cuộc tấn công vét cạn ngay cả khi tăng sức mạnh tính toán có lớn đến mức nào đi chăng nữa. Whirlpool Whirlpool là một hàm băm mật mã được thiết kế bởi Vincent Rijmen và Paulo S. Nó được mô tả đầu tiên vào năm 2000.
Whirlpool dựa trên phiên Luan van 10 bản sửa đổi đáng kể của Tiêu chuẩn mã hóa nâng cao (AES). Whirlpool tạo ra một bản tóm tắt có độ dài 512 bit (64 byte) của dữ liệu. SHA-2 SHA-2 là một tập hợp các hàm băm mật mã được thiết kế bởi Cơ quan an ninh quốc gia Hoa Kỳ (NSA), được xuất bản lần đầu tiên vào năm 2001. Chúng được xây dựng bằng cấu trúc Merkle–Damgård, chức năng nén một chiều của nó được xây dựng bằng cấu trúc Davies–Meyer từ một hệ mật mã khối chuyên dụng.
SHA-2 về thực chất bao gồm hai thuật toán băm: SHA-256 và SHA-512. SHA-224 là một biến thể của SHA-256 với các giá trị khởi tạo và đầu ra bị cắt bỏ khác nhau. SHA-384 và SHA-512/224 và SHA-512/256 ít được biết đến là tất cả các biến thể của SHA-512. SHA-512 an toàn hơn SHA-256 và thường nhanh hơn SHA-256 trên các máy 64 bit như AMD64.
Do có nhiều phiên bản thuật toán khác nhau do đó kích thước đầu ra của họ SHA-2 cũng khác nhau tùy theo thuật toán.