3.3.2.2 Phần mềm triển khai trên smartphone Android cơ bản
Smart phone sử dụng trong phần này là Samsung Galaxy J3 Pro (2017), có thơng số kỹ thuật như sau:
Bảng 11: thông số kỹ thuật Samsung Galaxy J3 Pro
Thông số Chi tiết
RAM 2GB
Chipset Exynos 7570
CPU 4 core 1.4GHz
- Thuật toán RSA-3072
Bảng 12: kết quả đo tốc độ thực hiện RSA-3072 (Galaxy J3)
Lần thực hiện Tạo cặp khóa (ms) Tạo chữ ký (ms) Xác thực chữ ký (ms)
1 19359 85 11 2 12714 70 11 3 11169 72 11 4 13269 73 10 5 10766 83 11 6 15991 71 10 7 9994 74 10 8 11588 69 10 9 10366 72 10 10 9733 74 10 Trung bình 12494.9 74.3 10.4
Hình 3.7: triển khai thuật tốn RSA-3072 trên Samsung Galaxy J3 - Thuật toán ECC-256
Bảng 13: kết quả đo tốc độ thực hiện ECC-256 (Galaxy J3)
Lần thực hiện Tạo cặp khóa (ms) Tạo chữ ký (ms) Xác thực chữ ký (ms)
1 57 16 164 2 55 18 164 3 53 17 168 4 55 15 167 5 57 16 164 6 52 17 165 7 54 15 171 8 53 14 160 9 56 15 163 10 52 14 162 Trung bình 54.4 15.7 164.8
Hình 3.9: so sánh hiệu năng RSA-3072 và ECC-256 trên Samsung Galaxy J3 3.3.3 Lập trình ứng dụng 3.3.3 Lập trình ứng dụng
3.3.3.1 RSA-3072 - Tạo cặp khóa
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); keyPairGenerator.initialize(3072,new SecureRandom());
KeyPair keyPair = keyPairGenerator.generateKeyPair();
publicKey = keyPair.getPublic(); privateKey = keyPair.getPrivate();
- Tạo chữ ký điện tử
String origin = txtChuoi.getText().toString();
byte[] chuoiInput = origin.getBytes("UTF-8");
sig = Signature.getInstance("SHA256withRSA"); sig.initSign(privateKey);
sig.update(chuoiInput); signatureBytes = sig.sign();
- Xác thực chữ ký điện tử
String origin = txtChuoi.getText().toString();
sig = Signature.getInstance("SHA256withRSA","SC"); sig.initVerify(publicKey);
byte[] chuoiInput = origin.getBytes("UTF-8");
sig.update(chuoiInput); txtVerify.setText(sig.verify(signatureBytes)+""); 3.3.3.2 ECC-256 - Tạo cặp khóa ECNamedCurveParameterSpec spec = ECNamedCurveTable.getParameterSpec("prime256v1"); KeyPairGenerator g = KeyPairGenerator.getInstance("ECDSA","SC"); g.initialize(spec, new SecureRandom());
KeyPair keyPair = g.generateKeyPair();
privateKey = keyPair.getPrivate(); publicKey = keyPair.getPublic();
- Tạo chữ ký điện tử
String origin = txtChuoi.getText().toString();
byte[] chuoiInput = origin.getBytes("UTF-8");
sig = Signature.getInstance("SHA256withECDSA","SC"); sig.initSign(privateKey); sig.update(chuoiInput); signatureBytes = sig.sign(); txtSign.setText(Base64.encodeToString(signatureBytes,Base64.DEFAULT)); - Xác thực chữ ký điện tử
String origin = txtChuoi.getText().toString();
sig = Signature.getInstance("SHA256withECDSA","SC"); sig.initVerify(publicKey);
byte[] chuoiInput = origin.getBytes("UTF-8");
sig.update(chuoiInput);
txtVerify.setText(sig.verify(signatureBytes)+"");
3.3.4 Kết luận
Từ so sánh về lý thuyết và thực tế, chúng ta có thể thấy rằng, tuy thuật tốn mã hóa ECC chậm hơn RSA trong việc xác thực chữ ký điện tử nhưng tổng thời gian trung bình để thực hiện là nhỏ hơn rất nhiều so với RSA, đặc biệt đối với các thiết bị có tài nguyên thấp. Bên cạnh đó, do thuật tốn RSA đã phát triển, sử dụng rộng rãi và hết hạn bằng sáng chế từ lâu nên thuật toán này phải đối mặt với nhiều nguy cơ hơn ECC (3.1.2 – 3.1.3). Do đó, trong đề tài luận văn này tôi quyết định chọn ECC- 256 để áp dụng cho hệ thống access control mới.
Hình 3.10: tổng thời gian thực hiện t/bình giữa RSA-3072 và ECC-256 (Galaxy S8)
4 Chương 4: Chứng thực khóa cơng khai (Certificate Authority - CA)
4.1 Giới thiệu
Trong chương 2, tôi đã giới thiệu về cách thức hoạt động của mã hóa bất đối xứng, khóa cơng khai (public key) trong mã hóa bất đối xứng có thể được biết bởi bất cứ ai mà không ảnh hưởng đến độ an tồn của thơng tin cần giữ bí mật. Tuy nhiên, điều này cũng gây ra một vấn đề đó là: “Khi Alice muốn gửi thơng tin bí mật cho Bob thì Alice cần biết khóa cơng khai của Bob, Bob phải gửi public key của mình cho Alice. Tuy nhiên, Truty cũng có khả năng đưa cho Alice một public key và giả mạo đó là khóa của Bob. Bằng cách này Truty có thể đọc mọi thông tin mà Alice gửi cho Bob”. Vấn đề đặt ra là làm sao Alice biết khóa cơng khai nhận được chính là khóa của Bob, người mà mình muốn truyền thơng tin bí mật?
Vấn đề này được giải quyết bằng cách có một tổ chức thứ ba được mọi người tin cậy, đứng ra chứng nhận public key cho mỗi người. Bên thứ ba này phát hành một chứng nhận khóa cơng khai (public key certificate), một loại văn bản điện tử kết hợp chữ ký số để ràng buộc public key cùng danh tính của chủ sở hữu khóa. Tổ chức này được gọi là nhà cung cấp chứng nhận số, gọi tắt là CA (Certificate Authority). 4.2 Các loại chứng nhận số
Để khóa cơng khai của mình được chứng nhận, mỗi bên tham gia phải tạo một cặp khóa và gửi public key cho CA. Bên tham gia phải gửi kèm các thông tin về bản thân như tên, địa chỉ,…đến CA. CA chứng nhận khóa cơng khai bằng cách ký nhận chúng. Nếu các bên cịn lại tin tưởng vào CA thì họ có thể tin vào chữ ký của CA đó. Chứng nhận này là một tập tin nhị phân có thể dễ dàng chuyển đổi qua mạng máy tính và có một số chuẩn như sau:
4.2.1 Chứng nhận X.509
Chứng nhận X.509 là chứng nhận khóa cơng khai phổ biến nhất. Hiệp hội viễn thông quốc tế (International Telecommunication Union – ITU) đã chỉ định chuẩn
X.509 vào năm 1988 [24] – đây là phiên bản 1 của chuẩn X.509. Vào năm 1993, phiên bản 2 của chuẩn X.509 được phát hành với 2 trường nhận dạng được bổ sung. Phiên bản 3 của chuẩn X.509 được phát hành vào năm 1997.
Thông tin về các trường của chuẩn X.509 v3
Version Serial Number Signature Algorithm Issuer Name Validity Period Subject Name Public Key Issuer Unique ID Subject Unique ID Extensions Signature Hình 4.1: X.509 v3
- Version: cho biết thông tin phiên bản của chứng nhận X.509
- Serial Number: số seri được gán bởi CA. Mỗi CA nên gán một số seri duy nhất cho mỗi chứng nhận mà nó phát hành
- Signature Algorithm: thuật toán chữ ký điện tử mà CA sử dụng để ký chứng nhận. Trong chứng nhận X.509 thường là sự kết hợp giữa thuật toán băm (chẳng hạn như MD5 hoặc SHA-1) và thuật tốn mã hóa cơng khai (chẳng hạn như RSA).
- Issuer Name: tên tổ chức CA phát hành chứng nhận. Hai CA không được sử dụng cùng một tên phát hành.
- Validity Period: trường này bao gồm 2 giá trị chỉ định thời gian mà chứng nhận có hiệu lực.
- Subject Name: là một X.500 DN, xác định đối tượng sở hữu chứng nhận mà cũng là sở hữu của khóa cơng khai.
- Public key: xác định thuật tốn của khóa cơng khai và chứa khóa cơng khai được định dạng tùy thuộc vào kiểu của nó.
- Issuer Unique ID và Subject Unique ID: hai trường này được giới thiệu trong X.509 v2, được dùng để xác định hai tổ chức CA hoặc hai chủ thể khi cùng DN.
- Extensions: chứa các thông tin bổ sung cần thiết mà người thao tác CA muốn đặt vào chứng nhận. Trường này được giới thiệu trong X.509 v3.
- Signature: đây là chữ ký điện tử được tổ chức CA áp dụng. Tổ chức CA sử dụng khóa bí mật có kiểu quy định trong trường Signature Algorithm. Chữ ký bao gồm tất cả các phần khác trong giấy chứng nhận. Do đó, tổ chức CA chứng nhận cho tất cả các thông tin khác trong giấy chứng nhận chứ khơng chỉ cho tên chủ thể và khóa cơng khai.
Chứng nhận X.509 có những phần mở rộng phổ biến như sau:
- .cer: chứng nhận được mã hóa theo luật mã hóa tiêu chuẩn (Canonical Encoding Rules – CER).
- .der: chứng nhận được mã hóa theo luật mã hóa phân biệt (Distinguished Encoding Rules – DER).
- .pem (Privacy – Enhanced Electronic Mail): định dạng mã hóa được sử dụng để lưu trữ các chứng nhận hóa. Một tập tin được định dạng với chuẩn này có thể chứa các khóa bí mật, khóa cơng khai và các chứng nhận X.509. Định dạng này lưu trữ dữ liệu ở định dạng DER được mã hóa base64, nằm giữa:
“-----BEGIN CERTIFICATE-----” “-----END CERTIFICATE-----” phù hợp cho việc trao đổi ở dạng văn bản giữa các hệ thống
- .p7b, p7c: PKCS #7 là một định dạng mã hóa cho việc lưu trữ một chứng nhận số và chuỗi chứng nhận của nó dưới dạng các ký tự ASCII. Định dạng này được sử dụng bởi CA để trả về các chứng nhận được phát hành cùng với chuỗi chứng nhận.
- .pfx, .p12: PKCS #12 là một định dạng mã hóa cho việc lưu trữ một chứng nhận số và kết hợp với khóa bí mật dưới dạng ASCII. Định dạng này luôn luôn được trả về bởi CA khi CA phát sinh các khóa và phát hành chứng nhận đồng thời.
4.2.2 Chứng nhận chất lượng
Đặc điểm của chứng nhận chất lượng là chúng quan tâm tới đối tượng mà chúng được phát hành đến. Thực thể cuối sở hữu chứng nhận X.509 hoặc RFC 2459 có thể là một người hoặc một máy. Tuy nhiên, các chứng nhận chất lượng chỉ có thể được phát hành cho con người.
Chứng nhận chất lượng RFC 3039 cung cấp các yêu cầu chi tiết dựa trên nội dung của nhiều trường trong chứng nhận X.509. Các trường tên nhà xuất bản, tên chủ thể, phần mở rộng đều được cung cấp các yêu cầu nội dung cụ thể. Tên nhà xuất bản của chứng nhận chất lượng phải xác định được tổ chức chịu trách nhiệm phát hành chứng nhận đó. Tên chủ thể của chứng nhận chất lượng phải xác định một con người thật. 4.2.3 Chứng nhận thuộc tính Version Holder Issuer Signature Algorithm Serial Number Validity Perod Attributes Issuer Unique ID Extensions Signature
Các chứng nhận thuộc tính (Attribute Certificate – AC) là các chứng nhận điện tử khơng chứa khóa cơng khai. Thay vì thao tác chứng nhận khóa cơng khai, AC chỉ thao tác chứng nhận một tập hợp các thuộc tính. Các thuộc tính trong một AC được dùng để chuyển các thông tin giấy phép liên quan đến người giữ chứng nhận. Các chứng nhận thuộc tính phân quyền cho người giữ chúng.
Hệ thống phát hành, sử dụng và hủy AC là hạ tầng quản lý đặc quyền (Privilege Management Infrastructure – PMI). Trong PMI, tổ chức chứng nhận thuộc tính (Attribute Authority – AA) phát hành AC. Một AA có thể khơng giống như một CA. Động cơ chính cho việc sử dụng AC là để cấp phép. Vì một người dùng có thể chỉ giữ một vai trị nào đó trong tổ chức trong một thời gian ngắn, nên khác với chứng nhận khóa cơng khai, AC chỉ có giá trị trong một vài ngày hoặc ngắn hơn.
4.2.4 Kết luận
Trong đề tài này, tôi sử dụng chứng nhận số theo chuẩn X.509. 4.3 Quá trình cấp chứng nhận số
Trong phần này tơi sẽ trình bày q trình người dùng tạo yêu cầu cấp chứng chỉ khóa cơng khai (Certificate Signing Request – CSR) theo tiêu chuẩn PKCS #10.
4.3.1 Yêu cầu cấp chứng nhận theo chuẩn PKCS #10
Version Subject Name Signature Algorithm Attributes Signature Public key
- Version: phiên bản của định dạng yêu cầu chứng nhận
- Subject Name: là một X.500 DN, xác định thực thể cuối yêu cầu chứng nhận, người sở hữu khóa cơng khai
- Public key: chỉ ra thuật tốn của khóa cơng khai, chứa khóa cơng khai có định dạng tùy thuộc vào loại của nó.
- Attributes: bao gồm các thông tin bổ sung dùng để xác định thực thể cuối. - Signature algorithm: chỉ ra thuật tốn mã hóa được dùng bởi thực thể cuối để
ký yêu cầu chứng nhận.
- Signature: chữ ký điện tử được áp dụng bởi thực thể cuối yêu cầu chứng nhận 4.3.2 Quá trình cấp chứng nhận số
Lưu đồ giải thuật quá trình cấp chứng nhận số
START
Người dùng tạo cặp khóa: - public key
- private key
Người dùng tạo yêu cầu cấp chứng nhận (CSR) gồm các thông tin theo chuẩn PCKS #10
Người dùng ký CSR bằng private key của mình và gửi đến CA server
CA server nhận CSR tạo ra chứng chỉ theo chuẩn X.509 và ký nó bằng private key của CA server
CA server chuyển chứng nhận trở lại cho người dùng yêu cầu hoặc lưu trữ trong các thư mục có thể download được.
STOP
Hình 4.5: minh họa quá trình cấp chứng nhận số [26] 4.4 Triển khai thực tế quá trình cấp chứng nhận số
Phần này trình bày quá trình tạo ra Certificate Signing Request từ người dùng (smart phone Android) và X.509 certificate sau khi CA server nhận CSR từ người dùng.
4.4.1 Certificate signing request (CSR) 4.4.1.1 Nội dung CSR 4.4.1.1 Nội dung CSR
-----BEGIN CERTIFICATE REQUEST-----
MIIBHzCBxQIBADBBMRUwEwYDVQQDDAx0aGFuaGxhbS5jb20xDDAKBgNVBAoMA0JL VTEaMBgGA1UECwwRVGVsZWNvbSBEZXBhcm1lbnQwWTATBgcqhkjOPQIBBggqhkjO PQMBBwNCAARwSpBZC1BGY8RJTrPPHWFw9xqOLYdmvKTJQgoY8MMySHLyra7vlz4/ bRRHDW4AkY8a33ofRxZymdgErsLCQfE0oCIwIAYJKoZIhvcNAQkOMRMwETAPBgNV HRMBAf8EBTADAQH/MAoGCCqGSM49BAMCA0kAMEYCIQCP7OjF2Wb5Qt/YO7NjXpX6 oSYZkPYH6cuicPcGJPqZuQIhAMmCpyDHdgxCE4+3NoxGKtWVsRpXDk7sCSzt0ct0 X6eP
4.4.1.2 Giải mã CSR
Dùng cơng cụ giải mã online [27], ta có thể đọc được nội dung CSR
Hình 4.6: chép nội dung file CSR vào cơng cụ giải mã
Hình 4.8: giải mã CSR (2)
Hình 4.9: giải mã CSR (3) 4.4.2 X.509 certificate
4.4.2.1 Nội dung certificate -----BEGIN CERTIFICATE-----
MIICgjCCAWqgAwIBAgIBADANBgkqhkiG9w0BAQUFADBBMRUwEwYDVQQDDAx0aGFu
aGxhbS5jb20xDDAKBgNVBAoMA0JLVTEaMBgGA1UECwwRVGVsZWNvbSBEZXBhcm1l
bnQwHhcNMTcxMDI0MTYwMDAxWhcNMTgxMDI0MTYwMDAxWjBBMRUwEwYDVQQDDAx0
cm1lbnQwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARwSpBZC1BGY8RJTrPPHWFw 9xqOLYdmvKTJQgoY8MMySHLyra7vlz4/bRRHDW4AkY8a33ofRxZymdgErsLCQfE0 o1AwTjAdBgNVHQ4EFgQUsEs7ZJPk3Ym4ycqosSiyGJzW3ZAwHwYDVR0jBBgwFoAU sEs7ZJPk3Ym4ycqosSiyGJzW3ZAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUF AAOCAQEAFIDysmfoJkoQvBwKGL5OSdzEKmlMVEKLocpTsYFOZ2jD2ISHI4ZXwKcj 02VBD0btfLFB6JzkgYUHKiUbiW/Q5xTjODLtRydm6qJa0ThZgnSo8p5CM3DuzR4H Egik1JdupQWsX7m+7T1Ta+V7J8SOMdLyyqc/pXAKi6jlWYpuW8vv3GMvU5FkGvSu UM2VDKkrQyXLDZiIcJz6MryFQRrJ+LG7k6XDdABCgwLadsGYUJeADi084O1RSoTm Z2VbaFPi1EDHcBlJapoz56jmMabcVXHf4brLn7iRpSsERpAbgAOsDIwvgoji+6UN oTBT+CCrX8KrEv3EBdVvwvCPUsy/LA== -----END CERTIFICATE----- 4.4.2.2 Giải mã X.509 certificate
Hình 4.10: chép nội dung file certificate vào công cụ giải mã
Hình 4.12: giải mã certificate (2)
5 Chương 5: Tổng quan QR code
5.1 Giới thiệu
QR code còn gọi là mã ma trận (hay mã vạch hai chiều) được phát triển bởi công ty Denso Wave (Nhật Bản) vào năm 1994. [28]
Chữ “QR” xuất phát từ “Quick Response”, trong tiếng Anh có nghĩa là đáp ứng nhanh, vì người tạo ra nó có ý định cho phép mã được giải mã ở tốc độ cao. Các mã QR được sử dụng phổ biến ở Nhật Bản, và hiện nay là loại mã hai chiều thông dụng nhất Nhật Bản.
Mặc dù lúc đầu mã QR được dùng để theo dõi các bộ phận trong sản xuất xe hơi nhưng hiện nay nó được dùng trong quản lý kiểm kê ở nhiều ngành khác nhau. Gần đây hơn, phần mềm đọc mã QR có thể được cài vào điện thoại có camera điều này dẫn đến các ứng dụng mới và đa dạng hơn cho người dùng. Một mã QR có thể chứa một địa chỉ web (URL), thời gian diễn ra một sự kiện, thông tin liên hệ (như vCard), địa chỉ mail…giúp đơn giản hóa việc phải nhập dữ liệu vào điện thoại đi động.
Tiêu chuẩn Nhật Bản cho mã QR, JIS X 0510, được công bố vào tháng giêng năm 1999 và tiêu chuẩn quốc tế ISO tương ứng là ISO/IEC18004, được thông qua vào tháng sáu năm 2000.
Ngày nay, mã QR dần dần trở nên phổ biến trên toàn thế giới. Bảng 14: số lượng người dùng QR code 2011 -2015 [29] Số lượng người dùng QR code trong quý I của các năm
Năm Số lượng người dùng (triệu)
2011-Q1 7.5
2012-Q1 13.3
2013-Q1 18.2
2014-Q1 21.8
Hình 5.1: minh họa QR code 5.2 Cấu trúc QR code 5.2 Cấu trúc QR code
QR code gồm các thành phần sau:
- Finder Pattern: là các mẫu xác định vị trí đặc biệt nằm ở 3 góc (phía trên bên trái, phía trên bên phải và phía dưới bên trái) của mỗi QR code. Nhờ có finder pattern QR code có thể đọc 360o
- Separators: là phần khoảng trắng ở giữa finder pattern và vùng mã hóa (encoding region).
- Timing patterns: có hai timing pattern, một theo chiều dọc và một theo chiều ngang. Chúng bao gồm các module sáng và tối xen kẽ nhau. Timing pattern theo chiều ngang nằm ở hàng thứ 6 của QR code giữa separators. Timing pattern theo chiều dọc nằm ở cột thứ 6 của QR code giữa separators. Timing pattern rất hữu ích trong việc xác định mật độ các ký hiệu, tọa độ các module và vùng thông tin phiên bản.
- Alignment patterns: được xây dựng với 5x5 module tối, 3x3 module sáng và một module tối duy nhất ở trung tâm.
- Encoding region: khi vực mã hóa chứa thơng tin định dạng (format information), thông tin phiên bản (version information), dữ liệu và mã sửa lỗi. Thông tin định dạng là một mảng module đặt ở phía trên bên trái, phía trên bên phải và phía dưới bên trái gần với finder pattern. Thông tin phiên bản là