NGHIÊN CỨU MỘT SỐ TẤN CÔNG TÌM KHÓA RIÊNG LIÊN QUAN VIỆC THỰC THI GIÁ TRỊ NONCE TRONG CHUẨN KÝ SỐ ECDSA SECP256K1

50 2 0
NGHIÊN CỨU MỘT SỐ TẤN CÔNG TÌM KHÓA RIÊNG LIÊN QUAN VIỆC THỰC THI GIÁ TRỊ NONCE TRONG CHUẨN KÝ SỐ ECDSA SECP256K1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

NGHIÊN CỨU MỘT SỐ TẤN CÔNG TÌM KHÓA RIÊNG LIÊN QUAN VIỆC THỰC THI GIÁ TRỊ NONCE TRONG CHUẨN KÝ SỐ ECDSA SECP256K1 Hiện nay, sự bùng nổ mạnh mẽ của mạng Internet đóng vai trò quan trọng và to lớn cho sự phát triển của xã hội. Bên cạnh những lợi ích lớn lao mạng lại thì mạng Internet luôn tiềm ẩn những rủi ro gây mất an toàn dữ liệu người dùng, tính bảo mật và sự riêng tư. Do đó cần có các biện pháp để ngăn chặn các nguy cơ này. Chữ ký số là một trong những phương pháp hiệu quả nhằm đảm bảo tính xác thực nguồn gốc dữ liệu. Mọi thay đổi sau khi tài liệu được ký đều không hợp lệ, do đó ngăn chặn việc giả mạo và chống chối bỏ. Hiện nay đã có nhiều thuật toán chữ ký số được sử dụng và một trong số đó là thuật toán chữ ký số dự trên đường cong Elliptic (ECDSA Elliptic Curve Digital Signature Algorithm). ECDSA lần đầu tiên được đề xuất vào năm 1992 bởi Scott Vanstone và được phê duyệt thành tiêu chuẩn của ANSI (Viện tiêu chuẩn quốc gia Hoa Kỳ) vào năm 1999 (ANSI X9.62 1998). ECDSA được ứng dụng rộng rãi trong rất nhiều lĩnh vực cần tính bảo mật, đặc biệt như trong Blockchain. Công nghệ Blockchain trở thành xu hướng chính trong cuộc cách mạng công nghệ 4.0. Để đảm bảo cho một chuỗi khối hoạt động thì chữ ký số đóng một vai trò rất quan trọng. Chữ ký số có liên quan đến hai giai đoạn là giai đoạn ký và giai đoạn xác minh các giao dịch. Lược đồ chữ ký số điển hình được sử dụng trong công nghệ Blockchain là ECDSA, đặc biệt là ECDSA trên đường cong SECP256K1. Tuy nhiên việc sử dụng giá trị Nonce không đúng trong ECDSA trên đường cong SECP256K1 có thể dẫn đến các tấn công tìm được khóa riêng. 2. Mục tiêu đề tài: Tìm hiểu lược đồ ký số ECDSA trên đường cong SECP256K1; Nghiên cứu các tấn công lên ECDSA SECP256K1 liên quan giá trị Nonce; Thực thi tấn công lên ECDSA SECP256K1 tìm khóa riêng liên quan giá trị Nonce. 3. Kết cấu của đồ án tốt nghiệp Sau khi tìm hiểu, nghiên cứu, nội dung và kết quả đồ án sẽ được trình bày trong ba chương như sau: ix Chương 1: Tổng quan về chữ ký số Chương này trình bày những kiến thức nền tảng về chữ ký số và các lược đồ chữ ký số phổ biến hiện nay. Chương 2: Nghiên cứu một số tấn công lên ECDSA SECP256K1 liên quan giá trị Nonce Chương này giới thiệu về lược đồ ký số ECDSA SECP256K1 và phân tích các tấn công lược đồ ký số ECDSA SECP256K1 liên quan giá trị Nonce từ đó đưa ra các biện pháp để phòng chống các nguy cơ tấn công này. Chương 3: Thực thi một số tấn công tìm khóa riêng liên quan giá trị Nonce trong ECDSA SECP256K1 Chương này thực thi tấn công tìm khóa riêng liên quan giá trị Nonce trong ECDSA SECP256K1. Cuối cùng là phần kết luận, tóm lược lại những kết quả đã đạt được và đề xuất hướng phát triển trong tương lai. Một số nội dung đồ án đã đạt được như sau: > Tìm hiểu tổng quan về chữ ký số, bao gồm: khái niệm, thuật toán, ứng dụng và một số lược đồ ký số phổ biến. > Tìm hiểu, nghiên cứu về lược đồ chữ ký số trên đường cong Elliptic ECDSA cùng các tham số miền SECP256K1, các tấn công lên lược đồ liên quan đến giá trị k. > Đã thực hiện cài đặt thành công chương trình mô phỏng lược đồ chữ ký số ECDSA SECP256K1 bằng ngôn ngữ lập trình C. > Thực hiện mô phỏng tính toán tìm khóa riêng liên quan giá trị Nonce và cài đặt giải pháp phòng chống. > Tìm hiểu, nghiên cứu sâu hơn tấn công tìm khóa riêng liên quan đến rò rỉ giá trị nonce k. > Triển khai cài đặt lược đồ trên phần cứng nhằm tăng hiệu quả thực hiện phục vụ cho một số ứng dụng quan trọng.

iii ĐẠI HỌC BÁCH KHOA HÀ NỘI LUẬN VĂN THẠC SĨ NGHIÊN CỨU MỘT SỐ TẤN CƠNG TÌM KHĨA RIÊNG LIÊN QUAN VIỆC THỰC THI GIÁ TRỊ NONCE TRONG CHUẨN KÝ SỐ ECDSA SECP256K1 Nguyen Thanh Long Hà Nội - 2023 iv MỤC LỤC LỜI CẢM ƠN i LỜI CAM ĐOAN ii MỤC LỤC iii CÁC KÝ HIỆU, CHỮ VIẾT TẮT v DANH MỤC HÌNH VẼ vi LỜI MỞ ĐẦU vii CHƯƠNG 1: Tổng quan chữ ký số 1.1 Khái niệm 1.2 Một số lược đồ ký số phổ biến 1.2.1 Lược đồ chữ ký số RSA 1.2.2 Lược đồ chữ ký số Elgamal .7 1.3 Vai trò, ứng dụng chữ ký số 10 1.4 Kết luận chương 12 CHƯƠNG 2: Nghiên cứu số công lên ECDSA SECP256K1 liên quan giá trị Nonce 13 2.1 Lược đồ ký số ECDSA SECP256K1 13 2.1.1 Các tham số miền ECDSA SECP256K1 13 2.1.2 Thuật tốn tạo khóa 17 2.1.3 Thuật toán ký 18 2.1.4 Thuật toán kiểm tra 19 2.1.5 Nhận xét độ an toàn lược đồ ECDSA 21 2.2 Tấn công lược đồ ký số ECDSA SECP256K1 liên quan giá trị Nonce 23 2.2.1 Tấn cơng tìm khóa riêng ECDSA SECP256K1 từ rị rỉ giá trị Nonce 23 v 2.2.2 Tấn cơng tìm khóa riêng ECDSA SECP256K1 với giá trị Nonce tương tự dùng .24 2.3 Biện pháp phòng chống 26 2.4 Ứng dụng ECDSA SECP256K1 Blockchain 27 2.4.1 Ký xác minh giao dịch Blockchain .28 2.4.2 Địa dẫn xuất địa blockchain 31 2.5 Kết luận chương 32 CHƯƠNG 3: Thực thi số cơng tìm khóa riêng liên quan giá trị Nonce ECDSA SECP256K1 .33 3.1 Cài đặt ECDSA SECP256K1 .33 3.1.1 Một số lưu đồ giải thuật chương trình 33 3.1.2 Cài đặt thử nghiệm chương trình thử nghiệm chương trình 37 3.2 Thực thi công 42 3.2.1 Tấn cơng tìm khóa riêng sử dụng lại nonce người dùng 42 3.2.2 Tấn cơng tìm khóa riêng sử dụng lại nonce hai người dùng 43 3.3 Cài đặt giải pháp đánh giá 45 3.3.1 Cài đặt giải pháp 45 3.3.2 Đánh giá 49 3.4 Kết luận chương 49 KẾT LUẬN 50 TÀI LIỆU THAM KHẢO 51 vi Viết tắt ANSI CÁC KÝ HIỆU, CHỮ VIẾT TẮT Tiếng Anh Tiếng Việt American National Standard Viện tiêu chuẩn quốc gia Hoa Kỳ Institute DLP Discrete Logarithm Problem Bài toán logarithm rời rạc ECC ECDSA Elliptic Curve Cryptosystem Elliptic Curve Digital Signature Hệ mật đường cong Elliptic Thuật toán chữ ký số đường Algorithm cong Elliptic Federal Information Tiêu chuẩn xử lý thông tin liên Processing Standard bang Hash - based Message Mã xác thực thông báo dựa Authentication Code hàm hash International Organization for Tổ chức tiêu chuẩn hóa quốc tế FIPS HMAC ISO Standardization OS2I Octet String to Integer NIST The National Institute of Hàm biến đổi chuỗi octet thành số nguyên Viện tiêu chuẩn công nghệ quốc Standards and Technology gia PoS Proof of Stake Thuật toán chứng cổ phần PoW Proof of Work Thuật tốn chứng cơng việc RFC Request for Comments Đề nghị duyệt thảo bình luận RSA Rivest-Shamir-Adleman Thuật tốn mã hóa khóa cơng khai RSA RNG Random Number Generator Sinh số ngẫu nhiên SHA Secure Hash Algorithm Thuật tốn băm an tồn DANH MỤC HÌNH VẼ Hình 1.1 Sơ đồ tạo kiểm tra chữ kýsố Hình 1.2: Sơ đồ hoạt động lược đồchữ ký số RSA Hình 1.3: Sơ đồ hoạt động lược đồ chữ ký số Elgamal vii Hình 2.1: Đường cong y2 = x3 +7 15 Hình 2.2: Quy trình tính toán chữ ký 18 Hình 2.3:Quy trình kiểm tra chữ ký 20 Hình 2.4: Khuyến nghị NIST độ bảo mật thời gian sử dụng thuật toán mật mã năm 2020 22 Hình 2.5: Các bước thực giao dịch Blockchain 29 Hình 3.1 :Lưu đồ thuật tốn tạo khóa chữ ký số ECDSA SECP256K1 33 Hình 3.2: Lưu đồ thuật tốn tạo chữ ký số ECDSA SECP256K1 34 Hình 3.3: Lưu đồ thuật tốn kiểm tra chữ ký số ECDSA SECP256K1 36 Hình 3.4: Giao diện Mơ-đun sinh khóa 37 Hình 3.5:Giao diện mơ-đun Tạo chữ ký 38 Hình 3.6: Giao diện mô-đun Xác minh chữ ký 38 Hình 3.7: Mơ tả kết sinh khóa dùng choký số 39 Hình 3.8: Mơ tả kết tạo chữ ký 40 Hình 3.9: Kết kiểm tra chữ ký (hợp lệ) 40 Hình 3.10:Kết kiểm tra chữ ký (không hợp lệ) 41 Hình 3.11: Giao diện phần mềm mơ cơng tìm khóa riêng sử dụng lại nonce người dùng 42 Hình 3.12: Kết cơng tìm khóa bí riêng sử dụng lại nonce người dùng 43 Hình 3.13: Giao diện phần mềm mơ cơng tìm khóa riêng sử dụng lại nonce hai người dùng 44 Hình 3.14: Kết cơng tìm khóa bí riêng sử dụng lại nonce bởi hai người dùng 44 Hình 3.15: Lưu đồ thuật tốn sinh k theo RFC 6979 46 viii LỜI MỞ ĐẦU Tính cấp thiết đề tài Hiện nay, bùng nổ mạnh mẽ mạng Internet đóng vai trị quan trọng to lớn cho phát triển xã hội Bên cạnh lợi ích lớn lao mạng lại mạng Internet ln tiềm ẩn rủi ro gây an toàn liệu người dùng, tính bảo mật riêng tư Do cần có biện pháp để ngăn chặn nguy Chữ ký số phương pháp hiệu nhằm đảm bảo tính xác thực nguồn gốc liệu Mọi thay đổi sau tài liệu ký khơng hợp lệ, ngăn chặn việc giả mạo chống chối bỏ Hiện có nhiều thuật tốn chữ ký số sử dụng số thuật tốn chữ ký số dự đường cong Elliptic (ECDSA - Elliptic Curve Digital Signature Algorithm) ECDSA lần đề xuất vào năm 1992 Scott Vanstone phê duyệt thành tiêu chuẩn ANSI (Viện tiêu chuẩn quốc gia Hoa Kỳ) vào năm 1999 (ANSI X9.621998) ECDSA ứng dụng rộng rãi nhiều lĩnh vực cần tính bảo mật, đặc biệt Blockchain Công nghệ Blockchain trở thành xu hướng cách mạng cơng nghệ 4.0 Để đảm bảo cho chuỗi khối hoạt động chữ ký số đóng vai trị quan trọng Chữ ký số có liên quan đến hai giai đoạn giai đoạn ký giai đoạn xác minh giao dịch Lược đồ chữ ký số điển hình sử dụng cơng nghệ Blockchain ECDSA, đặc biệt ECDSA đường cong SECP256K1 Tuy nhiên việc sử dụng giá trị Nonce không ECDSA đường cong SECP256K1 dẫn đến cơng tìm khóa riêng Mục tiêu đề tài: - Tìm hiểu lược đồ ký số ECDSA đường cong SECP256K1; - Nghiên cứu công lên ECDSA SECP256K1 liên quan giá trị Nonce; - Thực thi cơng lên ECDSA SECP256K1 tìm khóa riêng liên quan giá trị Nonce Kết cấu đồ án tốt nghiệp Sau tìm hiểu, nghiên cứu, nội dung kết đồ án trình bày ba chương sau: ix Chương 1: Tổng quan chữ ký số Chương trình bày kiến thức tảng chữ ký số lược đồ chữ ký số phổ biến Chương 2: Nghiên cứu số công lên ECDSA SECP256K1 liên quan giá trị Nonce Chương giới thiệu lược đồ ký số ECDSA SECP256K1 phân tích cơng lược đồ ký số ECDSA SECP256K1 liên quan giá trị Nonce từ đưa biện pháp để phịng chống nguy công Chương 3: Thực thi số cơng tìm khóa riêng liên quan giá trị Nonce ECDSA SECP256K1 Chương thực thi công tìm khóa riêng liên quan giá trị Nonce ECDSA SECP256K1 Cuối phần kết luận, tóm lược lại kết đạt đề xuất hướng phát triển tương lai CHƯƠNG 1: TỔNG QUAN VỀ CHỮ KÝ SỐ 1.1 Khái niệm Chữ ký thông thường (chữ ký tay) có từ lâu đời phần vật lý tài liệu, phương tiện để xác thực nguồn gốc nội dung tài liệu Ngồi ra, chữ ký tay cịn có khả chống chối bỏ, tức người gửi sau ký vào tài liệu khơng thể chối bỏ chữ ký tài liệu sau ký khơng thể thay đổi nội dung Chữ ký tay đại diện cho người ký, khơng khác giả mạo dễ dàng nhận nhìn thấy Việc kiểm tra tính xác thực chữ ký tay thực phương pháp đơn giản (so sánh chữ ký tay tài liệu với chữ ký đăng ký trước người ký) nhằm khẳng định chữ ký người ký nội dung tài liệu không bị sửa đổi thêm bớt Đối với tài liệu điện tử, chữ ký tay không cịn đảm bảo tính Do cần phải có phương tiện để thay chữ ký tay Chữ ký số (hay gọi chữ ký điện tử) đời đưa vào sử dụng cách hiệu Định nghĩa 1.1 [1]: Chữ ký số (Digital Signature) dãy số, kết phép biến đổi mật mã thông báo nhằm cung cấp phương tiện để kiểm tra tính xác thực nguồn gốc thơng báo, tính tồn vẹn thơng báo tính khơng thể chối bỏ người ký Thông thường, chữ ký số biểu diễn dạng dãy số nhị phân Chữ ký số tạo sở sử dụng tập hợp quy tắc tập hợp tham số để xác định danh tính người ký kiểm tra tính tồn vẹn liệu Trong đó, phương tiện để thực chữ ký số kỹ thuật mật mã Mỗi chữ ký số tạo kiểm tra tính xác thực thơng qua lược đồ chữ ký số Mỗi lược đồ chữ ký số bao gồm thuật toán ký SĩgK thuật tốn kiểm tra VerK Mỗi người có cặp khóa bao gồm khóa riêng DK khóa cơng khai EK, khóa cơng khai thường cơng bố cách công khai phân phối thông qua chứng thực khóa cơng khai, cịn khóa riêng giữ bí mật tuyệt đối khơng thể tìm khóa riêng từ khóa cơng khai Người gửi sử dụng thuật tốn ký SigK khóa riêng DK để tạo chữ ký số, người nhận sử dụng thuật toán kiểm tra VerK khóa cơng khai EK tương ứng để kiểm tra tính xác thực thơng báo tính xác thực chữ ký số người gửi tạo Trong q trình tạo kiểm tra chữ ký, thơng báo thu gọn nhờ áp dụng thuật toán băm an tồn Một người khơng biết khóa riêng người ký thơng báo khơng thể tạo chữ ký số nên chữ ký số khơng thể bị giả mạo Khi sử dụng khóa cơng khai tương ứng người ký, kiểm tra tính xác thực chữ ký số thông báo ký Trong thực tế sử dụng, thơng báo thường có độ dài nói chung dài Trong lược đồ chữ ký số ký thông báo ngắn Để ký thông báo dài người ta phải chia thông báo thành nhiều phần ngắn ký vào tất phần gửi Những hạn chế giải pháp là: - Có q nhiều chữ ký số cho thơng báo làm giãn tin mức - Do trình ký chữ ký số cần thực phép tốn tốn thời gian thời gian để ký thông báo chấp nhận Các nhà phát triển mong muốn trường hợp chữ ký viết tay, chữ ký có độ dài ngắn hạn chế cho dù thơng báo có độ dài Vì chữ ký số ký cho bit thơng báo, muốn chữ ký có độ dài hạn chế thơng báo có độ dài tùy ý ta phải tìm cách rút gọn độ dài thơng báo Nhưng thân thông báo rút ngắn được, nên cịn cách tìm cho thơng báo thơng báo thu gọn có độ dài hạn chế thay việc ký thông báo, ta ký thông báo thu gọn Để giải vấn đề ta sử dụng hàm băm mật mã Trong lược đồ chữ ký số, với đầu vào thơng báo có độ dài hữu hạn tùy ý, hàm băm biến đổi thông báo thành thông báo rút gọn sau dùng thuật tốn ký để ký lên thơng báo rút gọn Cụ thể, người ký cần ký vào thông báo R ký tóm lược thơng báo z = h(R) sau: y = SigK(z) truyền cặp (R, y) lên kênh truyền thơng Q trình kiểm tra thực thơng qua việc tính z = h(R) dùng hàm băm công khai h kiểm tra xem hàm VerK(z, y) có nhận giá trị “đúng” hay khơng 1.2 Một số lược đồ ký số phổ biến 1.2.1 Lược đồ chữ ký số RSA Lược đồ chữ ký RSA có độ phức tạp tính tốn phụ thuộc vào việc giải toán lũy thừa theo modulo số lớn Lược đồ chữ ký RSA đề xuất năm 1977 nhà nghiên cứu Rivest, Shamir Adleman, lược đồ có ứng dụng thực tế rộng rãi dựa công nghệ sử dụng khóa chung Các phương pháp cơng RSA (Multicative Property) vấn đề khác liên quan tới chữ ký RSA đưa Davia Jonge Chaum 1.2.2 Lược đồ chữ ký số Elgamal Lược đồ chữ ký số Elgamal có nhược điểm chữ ký số dài gồm thành phần (u, V) phải gửi kèm theo thông báo R Thật vậy, để lược đồ an tồn phải sử dụng số modulus p lớn, nhiều người cho độ dài tối thiểu p 1024 bít Khi đó, độ dài chữ ký số 2048 bít Tuy vậy, có nhiều tính chất an tồn tốt nên lược đồ sử dụng rộng rãi lược đồ chữ ký số RSA đặc biệt chuẩn chữ ký số phát triển từ lược đồ chữ ký số Elgamal 1.3 Vai trò, ứng dụng chữ ký số Chữ ký số có vai trị quan trọng việc đảm bảo an tồn thơng tin cho giao dịch điện tử, phương tiện hữu ích cho doanh nghiệp thương mại điện tử Chữ ký số mơi trường điện tử có giá trị chữ ký bình thường giấy tờ, văn Cụ thể chữ ký số phục vụ ba mục đích: Xác thực nguồn gốc liệu, tồn vẹn liệu chống chối bỏ Xác thực nguồn gốc: Mặc dù thơng báo thường bao gồm thông tin thực thể gửi thư mà thông tin khơng xác Chữ ký số sử dụng để xác thực nguồn gốc thơng báo Khi quyền sở hữu khóa riêng chữ ký số bị ràng buộc với người dùng cụ thể, chữ ký hợp lệ cho biết thông báo gửi người dùng Tầm quan trọng độ tin cậy cao tính xác thực người gửi đặc biệt rõ ràng bối cảnh tài Ví dụ: giả sử văn phòng chi nhánh ngân hàng gửi hướng dẫn đến văn phòng trung tâm yêu cầu thay đổi số dư tài khoản Nếu văn phòng trung ương không bị thuyết phục thông báo 29 BigInteger e = CalculateE(Secp256k1.N, message); BigInteger c = s.ModInverse(Secp256k1.N); BigInteger u1 = (e * c).Mod(Secp256k1.N); BigInteger u2 = (r * c).Mod(Secp256k1.N); ECPoint point = Secp256k1.G.Multiply(u1).Add(publicKey.Multiply(u2)); BigInteger v = point.X.Mod(Secp256k1.N); return v.Equals(r); } 3.1.2 Cài đặt thử nghiệm chương trình thử nghiệm chương trình 3.1.2.1 Cài đặt chương trình Sử dụng phần mềm Visual Studio 2022 để viết chương trình, ngơn ngữ lập trình lựa chọn C# Thực cài đặt lược đồ chữ ký ECDSA SECP256K1 hệ điều hành Windows, với cấu hình máy CPU @ 2.40GHz, nhớ 4GB RAM, System type 64-bit Chương trình mơ gồm ba mơ-đun: Mơ-đun Sinh khóa: có chức tạo cặp khóa riêng khóa cơng khai, sử dụng thủ tục ký thủ tục kiểm tra chữ ký Cả khóa riêng khóa cơng khai biểu diễn dạng hex, khóa cơng khai lưu lại dạng nén Hình 3.4: Giao diện Mơ-đun sinh khóa Mơ-đun Tạo chữ ký: bao gồm thủ tục tạo chữ ký 30 Hình 3.5:Giao diện mơ-đun Tạo chữ ký Giao diện thủ tục tạo chữ ký yêu cầu phải nhập vào hai thơng tin là: + Tài liệu: thơng báo cần ký lên Kích thước thơng báo Chương trình ký file định dạng khác docx, txt, pdf, + Khóa riêng: khóa riêng bí mật người ký nhập vào người ký biết Nếu trường bị thiếu có cảnh báo quay lại Mô-đun Xác minh chữ ký: thủ tục kiểm tra chữ ký Kết kiềm ưa: Thời gian kiểm ưa chữ ký (ms): I I Reset Hình 3.6: Giao diện mô-đun xác minh chữ ký Giao diện thủ tục xác minh chữ ký yêu cầu nhập vào ba trường là: + Tài liệu: tài liệu cần xác minh + Chữ ký: Cặp giá trị (r, s) dùng để xác minh chữ ký + Khóa cơng khai người ký 31 Nếu trường nhập thiếu có cảnh báo quay lại 3.I.2.2 Thử nghiệm chương trình a) Sinh khóa Hình 3.7 kết cặp khóa tạo mơ-đun tạo khóa: Hình 3.7: Mơ tả kết sinh khóa dùng cho ký số Sau nhấn vào “Sinh khóa”, kết sinh cặp khóa riêng khóa cơng khai Hai giá trị khóa người dùng lưu vào hai file định dạng txt khác để sử dựng sau b) Tạo chữ ký Bước 1: Chọn file để ký File cần ký có tên test.txt với nội dung sau: Bước 2: Chọn khóa riêng người tạo chữ ký Giả sử sử dụng khóa riêng tạo Bước 3: Ân nút “Tạo chữ ký” để thực trình tạo chữ ký cho file tài liệu đầu vào Kết tạo chữ ký hiển thị hình 3.8 32 Hình 3.8: Mô tả kết tạo chữ ký c) Xác minh chữ ký Bước 1: Chọn file cần kiểm tra chữ ký Bước 2: Chọn file chữ ký tài liệu Bước 3: Chọn file khóa cơng khai Ví dụ 1: Giữ nguyên nội dung file, không sửa đổi File cần kiểm tra test.txt, file chữ ký file vừa lưu file khóa cơng khai lưu dạng txt Nội dung file chữ ký sau nhập vào hiển thị lên mục “Chữ ký” Nội dung file khóa cơng khai hiển thị mục “Khóa cơng khai” Tiến hành xác thực chữ ký Kết hợp lệ cho thơng báo hình Hình 3.9: Kết kiểm tra chữ ký (hợp lệ) Ví dụ 2: Thay đổi nội dung file test.txt cần xác thực tiến hành kiểm tra với chữ ký chưa thay đổi nội dung file ban đầu 33 Nội dung file sau sửa: Kết chương trình trả thơng báo sau: Hình 3.10:Kết kiểm tra chữ ký (không hợp lệ) Như sau thay đổi nội dung file cần ký chương trình thơng báo “Chữ ký bị thay đổi” Ví dụ 3: Thay đổi nội dung file khoacongkhai.txt lưu trữ khóa cơng khai để xác thực tiến hành kiểm tra với chữ ký chưa thay đổi nội dung file ban đầu Kết chương trình trả thơng báo sau: 3.2 Thực thi công Nội dung phần mơ lại tính tốn cơng tìm khóa riêng liên quan đến việc sử dụng lại giá trị nonce trình bày mục 2.2.2 34 3.2.1 Tấn cơng tìm khóa riêng sử dụng lại nonce người dùng Hình 3.11 giao diện phần mềm mơ cơng tìm khóa riêng sử dụng lại nonce người dùng: Hình 3.11: Giao diện phần mềm mơ cơng tìm khóa riêng sử dụng lại nonce người dùng Đầu vào gồm có tài liệu người dùng nhập vào Để tạo chữ ký cho văn bản, phần mềm sinh ngẫu nhiên khóa riêng d thực ký số tài liệu Trong trình sinh chữ ký cho tài liệu này, sử dụng mặc định giá trị nonce k Sau nhập đầu vào nhấn nút “Sinh chữ ký tìm khóa” để chạy chương trình đưa kết đầu Kết đầu bao gồm chữ ký số tài liệu, giá trị khóa riêng d giá trị k chương trình sử dụng hiển thị “Khóa bí mật” “Giá trị k”; giá trị khóa riêng d giá trị k tìm hiển thị “Khơi phục khóa riêng” “Khơi phục giá trị k” Đoạn mã thực chương trình sau: BigInteger tim k = ((e1-e2)*((s1s2).ModInverse(Secp256k1.N))).Mod (Secp256k1.N); 35 BigInteger tim kbm = ((s2*e1-s1*e2)*((signature1.Item1*(s1s2)).ModInverse(Secp256k1.N))).Mod(Secp256k1.N); Nội dung thực nghiệm sau: Hai văn đầu vào có nội dung sau: Tailieu1.txt - Notepad Tailieu2.txt - Notepad Tệp Soạn thảo Định dạng Xem Trợ giúp Tệp Soạn thảo Định dạng Xem Trợ giúp Sau nhấn vào “Sinh”, chương trình xuất chữ ký tài liệu trên, giá trị d k sử dụng thuật toán tạo chữ ký sơ ECDSA SECP256K1 tính tốn theo cơng thức mục 2.2.2 íệj MƠ PHỎNG TÌM KHĨA RIÊNG ECDSA SECP255K1 - □X Cùng người dùng người dùng Hình 3.12: Kết cơng tìm khóa bí riêng sử dụng lại nonce người dùng 3.2.2 Tấn cơng tìm khóa riêng sử dụng lại nonce hai người dùng Hình 3.13 giao diện phần mềm mơ cơng tìm khóa riêng sử dụng lại nonce người dùng: 36 íệj MƠ PHỎNG TÌM KHĨA RIÊNG ECDSA SECP255K1 - □X Cùng người dùng người dùng Hình 3.13: Giao diện phần mềm mơ cơng tìm khóa riêng sử dụng lại nonce hai người dùng Đầu vào gồm có tài liệu người dùng khác Trong trình ký số tài liệu này, gắn mặc định sử dụng giá trị nonce k để tạo chữ ký Sau nhập đầu vào nhấn nút “Sinh chữ ký” để chương trình đưa kết đầu Kết tạo chữ ký số văn bản, khóa riêng người dùng xuất “Khóa riêng A” “Khóa riêng B” Sau ấn nút “Tìm khóa riêng” để tính khóa riêng lẫn người dùng A, B theo công thức mục 2.2.2 thu kết hình 3.14: Hình 3.14: Kết cơng tìm khóa bí riêng sử dụng lại nonce bởi hai người dùng Đoạn mã thực chương trình sau: 37 BigInteger d2_tim = ((s2 * e1 - s1 * e2+s2*r1*d1) * ((s1*r1).ModInverse(Secp256k1.N))).Mod(Secp256k1.N); BigInteger d1_tim = ((s1 * e2 - s2 * e1 + s1 * r2 * d2) * ((s2 * r2).ModInverse(Secp256k1.N))).Mod(Secp256k1.N); 3.3 Cài đặt giải pháp đánh giá 3.3.1 Cài đặt giải pháp Đầu vào thuật tốn bao gồm: khóa riêng bí mật kích thước 256 bit sử dụng để tạo chữ ký, thơng báo M có kích thước giá trị n bậc điểm sở G nêu mục 2.1.1 Đầu thuật toán giá trị ngẫu nhiên < k < n — Thuật toán tạo tham số k minh họa Hình 3.15 38 Hình 3.15: Lưu đồ thuật toán sinh k theo RFC 6979 Q trình thực thơng qua hàm tạo k sau: 39 /// /// Cấp điểm sinh G /// Khóa riêng /// Số byte giá trị băm /// Gía trị băm dạng nhị phân liệu ký public static BigInteger GenerateK(BigInteger order, BigInteger privKey, int hashBytesLen, byte[] data) { var qlen = Hex.BitLength(order); var rolen = (qlen + 7) / 8.0; var hprivKey = Hex.ToByteArrayUnsigned(privKey, true); var bx = Hex.Join(hprivKey, data); //Bước var v = new byte[hashBytesLen]; for (var i = 0; i < v.Length; i++) v[i]++; //Bước var k = new byte[hashBytesLen]; //Bước using (var hmacsha256 = new HMACSHA256(k)) { var msg = Hex.Join(v, new byte[1], bx); k = hmacsha256.ComputeHash(msg); } //Bước using (var hmacsha256 = new HMACSHA256(k)) { v = hmacsha256.ComputeHash(v); } //Bước using (var hmacsha256 = new HMACSHA256(k)) { var msg = Hex.Join(v, new byte[] { }, bx); k = hmacsha256.ComputeHash(msg); } //Bước 40 using (var hmacsha256 = new HMACSHA256(k)) { v = hmacsha256.ComputeHash(v); } //Bước while (true) { //Bước 8.1 var t = new byte[0]; //Bước 8.2 while (t.Length < rolen) { using (var hmacsha256 = new HMACSHA256(k)) { v = hmacsha256.ComputeHash(v); } t = Hex.Join(t, v); } //Bước 8.3 var secret = Bits2Int(t, qlen); if (secret >= && secret < order) return secret; using (var hmacsha256 = new HMACSHA256(k)) { k = hmacsha256.ComputeHash(Hex.Join(v, new byte[0])); } using (var hmacsha256 = new HMACSHA256(k)) { v = hmacsha256.ComputeHash(v); } } 41 } private static BigInteger Bits2Int(byte[] array, int qlen) { var secret = Hex.HexToBigInteger(array); var l = array.Length * 8; if (l > qlen) return secret >> (l - qlen); return secret; } Sau có hàm sinh k, thuật toán sinh chữ ký, ta gọi hàm sinh k để sử dụng sau: BigInteger k = RFC6979.GenerateK(Secp256k1.N, privateKey, 32, message); 3.3.2 Đánh giá Việc sinh giá trị nonce k theo RFC 6979 nhằm tạo chữ ký số tất định có đặc tính sau: - Chữ ký tạo hồn tồn tương thích với ECDSA túy Các thực thể xác minh chữ ký khơng cần phải thay đổi chí phải biết quy trình sử dụng để tạo k - Việc tạo cặp khóa khơng bị thay đổi Các khóa riêng sử dụng với ECDSA tất định Việc tính giá trị k RFC 6979 tính thơng qua hàm HMAC với đầu vào khóa riêng rõ Vì vậy, an tồn giá trị k phụ thuộc vào hàm HMAC sử dụng hàm băm mật mã sử dụng kiến trúc HMAC Để tránh trùng lặp (va chạm) giá trị k hàm băm mật mã sử dụng kiến trúc HMAC phải đủ an toàn Theo khuyến nghị NIST nên dùng SHA2 SHA3 với phiên có độ dài đầu 256 512 bit Và độ an tồn chống va chạm sinh giá trị k 22 với n kích cỡ bit đầu hàm băm Độ an tồn trích dẫn dựa công nghịch lý ngày sinh nhật 3.4 Kết luận chương Dựa vào kiến thức lý thuyết tìm hiểu hai chương trước, chương 42 tiến hành cài đặt chương trình mơ lược đồ ECDSA đường cong SECP256K1 Tiến hành thực thi tìm khóa riêng liên quan đến việc sử dụng lại giá trị nonce k thử nghiệm giải pháp phòng chống việc sử dụng lại giá trị nonce theo RFC 6979 KẾT LUẬN Một số nội dung đồ án đạt sau: > Tìm hiểu tổng quan chữ ký số, bao gồm: khái niệm, thuật toán, ứng dụng số lược đồ ký số phổ biến > Tìm hiểu, nghiên cứu lược đồ chữ ký số đường cong Elliptic ECDSA tham số miền SECP256K1, công lên lược đồ liên quan đến giá trị k > Đã thực cài đặt thành cơng chương trình mô lược đồ chữ ký số ECDSA SECP256K1 ngơn ngữ lập trình C# > Thực mơ tính tốn tìm khóa riêng liên quan giá trị Nonce cài đặt giải pháp phịng chống > Tìm hiểu, nghiên cứu sâu cơng tìm khóa riêng liên quan đến rò rỉ giá trị nonce k > Triển khai cài đặt lược đồ phần cứng nhằm tăng hiệu thực phục vụ cho số ứng dụng quan trọng TÀI LIỆU THAM KHẢO Tiếng Anh [1] American Bankers Association, (1999), ANSI X9.62-1998: Public Key Cryptography for the Financial Services Industry: the Elliptic Curve Digital Signature Algorithm (ECDSA) [2] Brengel Michael and Christian Rossow, (2018, September), Identifying key leakage of bitcoin users, In International symposium on research in attacks, intrusions, and defenses (pp 623-643) [3] Daniel R L Brown, (2009), Sec 1: Elliptic curve cryptography Certicom Research, [4] Daniel R L Brown, (2010), Sec 2: Recommended elliptic curve domain parameters, Standards for Efficient Cryptography 43 [5] Gabrielle de Micheli, Nadia Heninger, (2020) Recovering cryptographic keys from partial information, by example,Cryptology ePrint Archive [6] Houria, Azine, Bencherif Mohamed Abdelkader, and Guessoum Abderezzak, (2019), A comparison between the secp256r1 and the koblitz secp256k1 bitcoin curves, Indonesian Journal of Electrical Engineering and Computer Science [7] Ismail, Leila, and Huned Materwala, (2019) A review of blockchain architecture and consensus protocols: Use cases, challenges, and solutions Symmetry [8] Pornin T, (2013), RFC 6979: Deterministic usage of the digital signature algorithm (DSA) and elliptic curve digital signature algorithm (ECDSA), The Internet Engineering Task Force [9] WANG, Ziyu, et al, (2020), ECDSA weak randomness in Bitcoin Future Generation Computer Systems, 102, 507-513 [10] William J Buchanan (2021), ECDSA: Revealing the private key, if nonce known (SECP256K1), https://asecuritysite.com/ecc/ecd3 [11] William J Buchanan (2021), ECDSA: Revealing the private key, if nonce revealled (SECP256K1), https://asecuritysite.com/SECP256K1/ecd5 [12] Yaga, Dylan, et al, (2018), Blockchain Technology Overview (NISTIR8202), NIST: National Institute of Standards and Technology

Ngày đăng: 25/08/2023, 14:47

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan