CHƯƠNG 1: CƠ SỞ LÝ LUẬN VỀ BLOCKCHAIN 1. Tìm hiều Blockchain Blockchain là chủ đề đang vô cùng nóng trên toàn cầu hiện nay. Nó cùng với Bitcoin và tiền kỹ thuật số trở thành đề tài bàn luận trên rất nhiều mặt báo và trong những cuộc trò chuyện của mọi người. Tuy nhiên, khi nói về blockchain vẫn còn nhiều tranh cãi.
Các nhà chuyên gia đánh giá rằng Bitcoin có thể chỉ là bong bóng, nhiều người cho rằng công nghệ phía sau nó là một sự đột phá và công nghệ này sẽ tiếp tục con đường của mình cho đến khi được chấp nhận và tích hợp với Internet. Blockchain là một sổ cái kỹ thuật số được phân chia hay dễ hiểu hơn là cơ sở dữ liệu trong một mạng. Sổ cái được chia sẻ cho những người tham gia vào mạng lưới. Điều này cho thấy rằng trong toàn bộ hệ thống không phải chỉ có một vị trí duy nhất, một tài liệu có thể làm căn cứ đáng tin (Authority) duy nhất, vì những lần sao chép cùng một phiên bản sổ cái được đặt ở nhiều nơi.
Tất cả các bản sao này được cập nhật khi dữ liệu hoặc giao dịch mới được ghi vào blockchain thông qua sự đồng thuận của tất cả mọi người tham gia. Người đào có trách nhiệm phê duyệt các giao dịch và giám sát mạng bằng cách giải quyết các công thức tinh vi với sự trợ giúp của máy tính. Nó là một hệ thống ngang hàng P2P, loại bỏ tất cả mọi khâu trung gian, làm tăng cường an ninh, minh bạch và sự ổn định cũng như giảm thiểu chi phí và lỗi do con người gây ra. Blockchain là công nghệ cốt lõi của tiền điện tử kỹ thuật số BitCoin.
Blockchain là một cơ sở dữ liệu phân tán các hồ sơ của tất cả các giao dịch hoặc sự kiện kỹ thuật số đã được thực hiện và chia sẻ giữa các bên tham gia. Mỗi giao dịch được xác minh bởi phần lớn những người tham gia hệ thống. Nó chứa mọi bản ghi duy nhất của mỗi giao dịch. BitCoin là một ví dụ về Blockchain, đồng thời nó cũng là loại tiền điện tử phổ biến nhất hiện nay.
Công nghệ Blockchain lần đầu tiên được công bố khi một người hoặc một tổ 3 chức ẩn danh có tên 'Satoshi Nakamoto' đã sáng tạo ra Bitcoin và đã khởi tạo ra phần mềm mã nguồn mở Bitcoin Core để công chúng sử dụng được Bitcoin. Bitcoin bắt đầu được Satoshi thiết kế từ 2007 khi ông tin rằng có thể thiết kế được một hệ thống giao dịch mà các thành viên không cần tin tưởng nhau. Bất kỳ thứ gì có giá trị như tài sản đất đai, ô tô. đều có thể được ghi lại trên Blockchain dưới dạng giao dịch.
Một số trích dẫn đáng chú ý về công nghệ này được liệt kê dưới đây: - “Thế hệ đầu tiên của cuộc cách mạng kỹ thuật số mang lại cho chúng ta thông tin của Internet. Thế hệ thứ hai - được hỗ trợ bởi công nghệ blockchain - mang lại cho chúng ta giá trị của Internet: một nền tảng mới để định hình lại thế giới kinh doanh và biến đổi thứ tự công việc của con người trở nên tốt hơn.” [3] - “Blockchain là một kho lưu trữ, cơ sở dữ liệu phân tán toàn cầu, chạy trên hàng triệu thiết bị và mở cho mọi người, không chỉ đơn thuần là thông tin mà còn cả những thứ có giá trị, cả danh hiệu, hành vi, danh tính, thậm chí cả phiếu bầu - có thể được di chuyển, lưu trữ và quản lý một cách an toàn và tư nhân. Sự tin tưởng được thiết lập thông qua hợp tác giữa số đông và mã thông minh chứ không phải bởi các nhà trung gian mạnh mẽ như các chính phủ và ngân hàng.” [3] Với khả năng chia sẻ thông tin dữ liệu minh bạch theo thời gian thực, tiết kiệm không gian lưu trữ và bảo mật cao, công nghệ blockchain (chuỗi khối) là một trong những xu hướng công nghệ đột phá, có khả năng ứng dụng rộng rãi ở nhiều ngành nghề, lĩnh vực. Nền tảng lý thuyết Công nghệ Blockchain được phát triển dựa trên hai nền tảng kỹ thuật chính là hàm băm và chữ ký số.
Mỗi người dùng sẽ sở hữu một cặp khóa gồm khóa bí mật và khóa công khai. Khóa bí mật được lưu trữ bí mật và sử dụng để ký kết các giao dịch. Hàm băm Hàm băm [6] 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ở. Khái niệm hàm băm Để lấy một bộ phận nhỏ của một thông điệp [6] thì cần phải sử dụng một phương pháp toán học gọi là phương pháp hàm băm (Hash function) là một giải thuật toán học (một ánh xạ một - một (một chiều)) cho ứng với một khối dữ liệu (một dãy bit hay một đối tượng trong lập trình hướng đối tượng của thông điệp gốc) một giá trị băm duy nhất. Chú ý ở đây tính một chiều có nghĩa là: Mỗi khối dữ liệu gốc qua một hàm băm sẽ cho một giá trị băm duy nhất, tuy vậy có thể có một giá trị băm ứng với hai khối dữ liệu gốc khác nhau vì vậy không thể từ giá trị băm tìm ngược lại khối dữ liệu đã sinh ra nó. Trường hợp qua một hàm băm H nếu có hai khối dữ liệu gốc nào đó cho cùng một giá trị băm thì ta gọi đấy là một sự đụng độ.
Tuy nhiên điều quan trọng là: Nếu hai giá trị băm khác nhau thì chắc chắn hai khối dữ liệu tạo ra chúng là khác nhau. Vì vậy người nhận có thể tính lại giá trị băm của thông điệp nhận được rồi so sánh với giá trị tính được khi giải mã chữ ký điện tử để kiểm tra: Nếu hai giá trị khác nhau thì có thể 5 khẳng định nội dung thông điệp đã bị thay đổi. Một hàm băm được đánh giá là tốt nếu số đụng độ xảy ra rất nhỏ (xác suất rất thấp và hầu như không thể xảy ra). Các phương pháp tạo hàm băm Một hàm băm tốt [6] phải thỏa mãn các điều kiện sau: - Tính toán nhanh - Các khóa được phân bố đều trong bảng - Ít xảy ra đụng độ - Xử lý được các loại khoa có kiểu dữ liệu khác nhau Các hàm băm được xác định theo cách tạo ra giá trị băm từ một dữ liệu.
Có hai phương pháp chính để tạo hàm băm thường dùng là phương pháp cộng và nhân, phương pháp quay vòng. Phương pháp băm kiểu cộng và nhân Theo phương pháp này giá trị băm được tạo ra bằng cách duyệt dọc theo chuỗi dữ liệu và liên tục cộng thêm vào một giá trị xuất phát từ một giá trị được tính cho mỗi phần tử trong dữ liệu. Giá trị tăng thêm ứng với mỗi phần tử thường được tính dưới dạng nhân với một số nguyên tố nào đó. Phương pháp băm bằng cách quay vòng Đối với phương pháp này cũng cộng thêm vào mỗi phần tử trong dãy một giá trị giống như phương pháp băm kiểu cộng nhưng ở đây giá trị cộng thêm được xét từ cả hai phía bên trái và bên phải, tính toán để cộng thêm vào tại mỗi phần tử.
Các dạng băm thông dụng Trong “Thư viện hàm băm tổng quát” (The General Hash function Library) có nêu lên một số hàm băm hỗn hợp cộng và quay vòng chẳng hạn như các thuật toán sau đây: RS Hash Function: Một số hàm băm đơn giản từ thuật toán Robert 6 Sedgwicks. JS Hash Function: Hàm băm tính từ hai phía do Justin Sobel đề xuất. PJW Hash Function: Thuật toán bâm dựa trên công trình của Peter J.Weinberger thuộc Phòng thí nghiệm AT&T Bell. BKDR Hash Function: Hàm băm này được mô tả trong tác phẩm của Brian Kernighan và Dennis Ritchie’s “The C Programming Language” (Ngôn ngữ lập trình C).
SDBM Hash Function: Đây là dạng hàm băm được chọn sử dụng trong các dự án mã nguồn mở SDBM. DJB Hash Function do GS. Berstein xây dựng và giời thiệu lần đầu tiên trên Newsgroup comp. Có lẽ đây là một trong những hàm băm hiệu quả nhất từ trước đến nay đã được công bố.
Message Digest (MD) algorithms: Những dãy thuật toán hướng byte, sản sinh ra một giá trị băm 128 bit cho các thông điệp có độ dài bất kỳ. - MD2 (RFC 1319): Được thiết kế cho những hệ thống có bộ nhớ hạn chế chẳng hạn như các thẻ thông minh. - MD4 (RFC 1320): Do Rivest phát triển, tương tự như MD2 nhưng được thiết kế đặc biệt cho những quá trình xử lý nhanh trong phần mềm. - MD5 (RFC 1321): Do Rivest phát triển sau khi phát hiện một số nhược điểm của MD4; Sơ đồ này tương tự như MD4 nhưng hoạt động chậm hơn do phải xử lý nhiều trên dữ liệu gốc.
MD5 được tích hợp vào nhiều sản phẩm dù rằng vẫn còn một số nhược điểm mà nhà mật mã học người Đức Hans Dobbdertin đã chỉ ra năm 1996. Secure Hash Alogorithm (SHA): Thuật toán của chuẩn hàm băm an toàn của NIST.NIST’s Secure Hash Standard (SHS). SHA-1 tạo ra một giá trị băm 160 bit ban đầu được công bố với tên gọi là FIPS 180-1 và RFC 3174. FIPS 180-2 7 (tức là SHA-2) mô tả 5 thuật toán trong chuẩn SHS: SHA-1 cùng với SHA- 224, SHA-256, SHA-384 và SHA-512 có thể tạo ra giá trị băm có độ dài 224, 256, 384 hoặc 512 bit.
Công dụng của hàm băm Hàm [6] thường được dùng để xây dựng các bảng băm tức là bảng ghi các giá trị băm ứng với một số khôi dữ liệu mẫu: khi cần so sánh hai khối dữ liệu nào đó (thường có kích thước rất lớn), ta chỉ cần so sánh các giá trị băm có kích thước rất nhỏ của chúng. Ví dụ về hoạt động của một hàm băm: Hai chuỗi dữ liệu gốc chỉ khác nhau một từ (runs và walks nhưng qua hàm băm cho ra hia giá trị băm hoàn toàn khác nhau. So sánh hai giá trị băm thấy khác nhau, từ đó kết luận hai chuỗi dữ liệu gốc là khác nhau (dù không thể biết chúng khác nhau ở đâu). Đầu vào Giá trị băm Fox Hàm băm DFCD3454 The red fox runs Hàm băm 52ED879E across the ice The red fox walks across the Hàm băm 46042841 ice Hình 1.1: Ví dụ về hàm băm (Nguồn: Tài liệu tham khảo [3]) Vì tính thông dụng của hàm băm.