Chữ ký số RSA

Một phần của tài liệu Nghiên cứu, nâng cao độ an toàn cho ứng dụng smart otp trong hệ thống ứng dụng phần mềm cung cấp dịch vụ trung gian thanh toán và mobile money (Trang 39 - 44)

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT CỦA MẬT KHẨU MỘT LẦN OTP

2.2. Cơ sở mật mã học của mật khẩu sử dụng một lần OTP

2.2.2. Chữ ký số RSA

Smart OTP được trao đổi công khai trên mạng Internet giữa ứng dụng và nhà cung cấp dịch vụ. Vì thế để đảm bảo an toàn cho quá trình trao đổi mã OTP, ứng dụng

cần phải áp dụng chữ ký số. Theo “Thông tư số 22/2020/TT-BTTTT Quy định về yêu cầu kỹ thuật đối với phần mềm kỹ thuật số, phần mềm kiểm tra chữ ký số” của Bộ Thông tin và Truyền thông ngày 07/09/2020, chữ ký số RSA là chuẩn chữ ký số duy nhất được sử dụng làm tiêu chuẩn về ký số, kiểm tra chữ ký số. Ngoài ra, chữ ký số RSA cũng được sử dụng để thống nhất khóa bí mật chung giữa ứng dụng và nhà cung cấp dịch vụ.

2.2.2.1. Giới thiệu về chữ ký số RSA

Để xác thực nguồn gốc, hiệu lực của một văn bản, từ trước tới nay người ta đều ký trực tiếp bằng tay vào phía dưới văn bản, ví dụ như đơn xin học, hợp đồng,…

Ngày nay khi các văn bản tài liệu đã được số hóa, người ta không thể ký tay vào tài liệu, cũng không thể sử dụng một chuỗi bit nhỏ làm chữ ký phía dưới chuỗi bit dài của tài liệu. Với lý do trên, vào những năm 80 của thế kỷ 20, chữ ký số đã được ra đời để xác thực cho các tài liệu số. Bản chất của tạo chữ ký số trên tài liệu số đó là tạo ra một bản mã của tài liệu đó cùng với khóa. Ký số trên tài liệu số là thực hiện ký trên từng bit của tài liệu nên chữ ký số có độ dài tối thiểu bằng độ dài của tài liệu, với những văn bản dài thì người ta sẽ tạo bản tóm tắt cho tài liệu bằng cách dùng hàm băm và thực hiện ký số trên bản tóm tắt đó [11].

Trước đây, người ta sẽ sử dụng phương thức mã hóa đối xứng, hay còn gọi là mã hóa với chìa khóa bí mật để truyền thông điệp. Khi hai người muốn truyền tin cho nhau thì sẽ sử dụng chung một chìa khóa để mã hóa và giải mã thông điệp. Tuy nhiên, phương thức này phát sinh ra một vấn đề, đó là làm sao hai người có thể thống nhất với nhau một chìa khóa chung mà không ai biết, đặc biệt là khi hai người không thể gặp mặt nhau để thống nhất. Đây là một bài toán lớn đối với các nhà khoa học mà phải đến những năm 70 mới có thể giải quyết. Một trong những cách giải bài toán đó là sử dụng hệ mã hóa bất đối xứng, hay có tên gọi khác là mã hóa với chìa khóa công khai.

Hệ mã hóa bất đối xứng là một hệ mã khóa sử dụng một cặp chìa khóa để mã hóa và giải mã thông điệp: để mã hóa người ta sẽ sử dụng khóa công khai (public key) và để giải mã người ta sử dụng khóa bí mật (private key). Bất kỳ ai có khóa công khai đều có thể mã hóa thông điệp và gửi đi, nhưng chỉ có người có khóa bí mật mới

có thể giải mã được thông điệp đó. Cặp khóa này khi được tạo ra sẽ có một mối liên hệ toán học đặc biệt và phải đảm bảo được rằng từ khóa công khai không thể truy ra được khóa bí mật. Hệ mã hóa khóa công khai bao gồm: hệ mã hóa RSA, hệ mã hóa Elgamal. “Hệ mã hóa RSA do Ron Rivest, Adi Shamir và Leonard Adleman mô tả lần đầu tiên vào năm 1977 tại trường Đại học MIT” [15]. RSA được sử dụng rộng rãi trong công nghệ chữ ký điện tử và công tác mã hóa.

Chữ ký số RSA được xây dựng dựa trên hệ mã hóa RSA để ký và xác thực chữ ký. Ngược lại với mã hóa RSA, chữ ký số RSA sẽ sử dụng khóa bí mật để ký và sử dụng khóa công khai để giải mã. Một hệ chữ ký số bao gồm quy trình tạo chữ ký số và quy trình kiểm tra chữ ký số. Trong đó, quy trình tạo chữ ký số gồm: thuật toán tạo chữ ký số, phương pháp chuyển đổi dữ liệu thành dạng có thể ký; quy trình kiểm tra chữ ký số gồm: thuật toán xác thực chữ ký số, phương pháp khôi phục dữ liệu.

Trong hệ thống ứng dụng phần mềm cung cấp dịch vụ Trung gian thanh toán và Mobile Money, chữ ký số RSA có vai trò trao đổi khóa bí mật chung và đảm bảo thiết bị, nhà cung cấp dịch vụ có thể xác thực lẫn nhau.

2.2.2.2. Sơ đồ hoạt động và thuật toán Quy trình tạo chữ ký số:

- Sử dụng hàm băm để tóm tắt văn bản thành một chuỗi dữ liệu có độ dài nhất định.

- Sử dụng khóa bí mật để mã hóa chuỗi dữ liệu, ta được chữ ký số.

- Ghép văn bản ban đầu cùng với chữ ký số để tạo thành văn bản đã được ký.

- Gửi văn bản đã được ký cho người nhận.

Hình 2.5. Quy trình tạo chữ ký số Quy trình kiểm tra chữ ký số:

- Sau khi nhận được văn bản đã được ký, thực hiện tách chữ ký số và văn bản ban đầu để xử lý riêng.

- Sử dụng hàm băm để tính toán giá trị băm M1 của văn bản ban đầu.

- Sử dụng khóa công khai do người gửi cung cấp để giải mã chữ ký số, ta được chuỗi M2.

- So sánh M1 và M2: nếu M1 bằng M2 thì kiểm tra chữ ký số thành công, văn bản ban đầu thực sự được gửi từ người gửi và còn nguyên vẹn. Nếu M1 khác M2

thì văn bản đã bị chỉnh sửa hoặc không phải do người gửi gửi đến.

Hình 2.6. Quy trình kiểm tra chữ ký số

Thuật toán để tạo khóa, mã hóa và giải mã chữ ký được trình bày dưới đây.

“Sinh khóa:

- Chọn 2 số nguyên tố lớn p và q (>1024 bit).

- Tính n = pq, n được gọi là modulo mã hóa.

- Sử dụng phi hàm Carmichael để tính một số giả nguyên tố có tính bí mật:

ϕ(n) = BCNN(p − 1, q − 1).

- Chọn số tự nhiên e trong khoảng (1, ϕ(n)) sao cho UCLN e, ϕ(n) = 1, tức là e và ϕ(n) nguyên tố cùng nhau.

- Tính toán số d sao cho de ≡ 1 (mod ϕ(n)).

Khóa công khai là bộ số (n, e) và khóa bí mật là bộ số (n, d).

Mã hóa và giải mã: Để mã hóa thông điệp M, ta cần chuyển nó thành số thập phân m sao cho m, n là hai số nguyên tố. Sau đó, mã hóa m thành c như sau:

c ≡ m mod n

Người nhận sẽ nhận giá trị c và tiến hành giải mã c để lấy được giá trị m như sau:

c ≡ m ≡ m mod n ” [15]

2.2.2.3. Các khuyến nghị an toàn

“Người gửi G gửi tài liệu x và chữ ký y đến người nhận N thì có hai cách xử lý:

- Ký trước, mã hóa sau: G thực hiện ký trước vào x chữ ký y, sau đó mã hóa x, y nhận được z, G gửi z cho N. Sau khi nhận được z, N thực hiện giải mã z để tìm được x, y và kiểm tra xem tài liệu sau khi đã giải mã có đúng là tài liệu ban đầu không.

- Mã hóa trước, ký sau: G mã hóa trước x nhận được giá trị u, sau đó ký vào u chữ ký v. G gửi cả u và v cho N. Khi nhận được, N sẽ giải mã u để nhận được x và kiểm tra xem tài liệu nhận được có đúng tài liệu ban đầu không.

Giả sử trong quá trình truyền tin từ G đến N, H lấy trộm được thông tin:

- Trong trường hợp ký trước, mã hóa sau: H lấy được z và phải giải mã z để lấy được chữ ký y.

- Trong trường hợp mã hóa trước, ký sau: H lấy được u và v. Để tấn công chữ ký v, H chỉ cần thay thế v bằng v’. Sau khi thay đổi chữ ký v trên u bằng v’, H sẽ gửi u và v’ đến N. Sau khi nhận được và kiểm tra thấy không đúng, N sẽ phản hồi lại G, G chứng minh được chữ ký v’ là giả mạo và gửi lại chữ ký v cho N. Điều này làm cho quá trình truyền tin tốn rất nhiều thời gian.

Vậy nên, các nhà khoa học khuyên rằng, người dùng nên ký trước rồi sau đó mã hóa cả tài liệu và chữ ký” [11].

Để chữ ký số được đảm bảo an toàn, kích thước khóa được khuyến nghị tối thiểu là 2048 bit hoặc có thể cao hơn là 3096 bit.

Một phần của tài liệu Nghiên cứu, nâng cao độ an toàn cho ứng dụng smart otp trong hệ thống ứng dụng phần mềm cung cấp dịch vụ trung gian thanh toán và mobile money (Trang 39 - 44)

Tải bản đầy đủ (PDF)

(77 trang)