Tải bản đầy đủ (.pdf) (59 trang)

Nghiên cứu thư viện lập trình Google Tink và ứng dụng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.79 MB, 59 trang )

BỘ THƠNG TIN VÀ TRUYỀN THƠNG
HỌC VIỆN BƯU CHÍNH VIỄN THƠNG

---------------------------

ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC
ĐỀ TÀI:

TÌM HIỂU, THỰC THI THƯ VIỆN MẬT MÃ
GOOGLE TINK ỨNG DỤNG TRONG KÝ SỐ VĂN
BẢN ĐIỆN TỬ

Cán bộ hướng dẫn

: TS. Nguyễn Mạnh Hợp

Sinh viên thực hiện

: Hà Huy Vương

Lớp

: K26

Khóa

: 26

Chun ngành

: Cơng nghệ thông tin



Hà Nội, 2022


BỘ THƠNG TIN VÀ TRUYỀN THƠNG
HỌC VIỆN BƯU CHÍNH VIỄN THƠNG

---------------------------

ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC
ĐỀ TÀI:

TÌM HIỂU, THỰC THI THƯ VIỆN MẬT MÃ
GOOGLE TINK ỨNG DỤNG TRONG KÝ SỐ VĂN
BẢN ĐIỆN TỬ

Cán bộ hướng dẫn

: TS. Nguyễn Mạnh Hợp

Sinh viên thực hiện

: Hà Huy Vương

Lớp

: K26

Khóa


: 26

Chun ngành

: Cơng nghệ thông tin

Hà Nội, 2022


LỜI CẢM ƠN
Em xin gửi lời cảm ơn sự quan tâm, giúp đỡ của các thầy cô trong Khoa
công nghệ thơng tin, các thầy cơ trong Học viện bưu chính viễn thông. Đặc biệt
là TS. Nguyễn Mạnh Hợp đã trực tiếp hướng dẫn và giúp đỡ em rất nhiều trong
suốt q trình nghiên cứu và hồn thành đồ án này.


LỜI CAM ĐOAN
Em xin cam đoan bản đồ án này là do em tự nghiên cứu dưới sự hướng
dẫn của TS. Nguyễn Mạnh Hợp.
Để hoàn thành đồ án này, em chỉ sử dụng tài liệu đã được ghi trong tài
liệu tham khảo, ngồi ra khơng sử dụng bất kỳ tài liệu nào khác mà không được
ghi.
Nếu sai, em xin chịu mọi hình thức kỷ luật theo quy định của Học viện
bưu chính viễn thơng.
Hà Nội, ngày tháng

năm 2022

Học viên thực hiện


Hà Huy Vương


MỤC LỤC
MỤC LỤ

Contents
LỜI CẢM ƠN ...................................................................................................... 3
LỜI CAM ĐOAN ................................................................................................ 4
MỤC LỤC ............................................................................................................ 5
DANH MỤC KÝ HIỆU, TỪ VIẾT TẮT .......................................................... 7
DANH MỤC HÌNH VẼ ................ ERROR! BOOKMARK NOT DEFINED.
DANH MỤC BẢNG BIỂU ................................................................................. 8
LỜI NÓI ĐẦU ..................................................................................................... 9
CHƯƠNG 1: TỔNG QUAN THƯ VIỆN MẬT MÃ ..................................... 10
1.1 Giới thiệu thư viện mật mã.................................................................. 10
1.1.1 Khái niệm .......................................................................................... 10
1.1.2 Vai trò thư viện mật mã .................................................................... 10
1.2 Một số thư viện mật mã phổ biến hiện nay .......................................... 10
1.2.1 OpenSSL ............................................................................................ 10
1.2.2

Thư viện mật mã Crypto ++ ........................................................ 12

1.2.3 GMP ................................................................................................... 14
1.2.4 JCA .................................................................................................... 15
1.3 So sánh các thư viện mật mã.................................................................. 15
1.4 Ứng dụng thư viện mật mã .................................................................... 16
1.4.1 Bảo mật thông tin lưu trữ và xây dựng phần mềm bảo mật........... 16
1.4.2 Bảo mật thông tin kênh truyền ........................................................ 19

1.5 Kết luận .................................................................................................... 23
CHƯƠNG 2. THƯ VIỆN MẬT MÃ GOOGLE TINK ................................. 24
2.1 Giới thiệu ................................................................................................. 24
2.2 Kiến trúc các lớp thuật toán mật mã .................................................... 25
2.2.1 AEAD (Authenticated Encyption with Associated Data) ................ 26
2.2.2 Streaming AEAD............................................................................... 33
2.2.3 Deterministic AEAD ......................................................................... 34
2.2.4 Mac .................................................................................................... 35


2.2.5 PRF .................................................................................................... 36
2.2.6 Digital Signatures ............................................................................. 36
2.2.7 Hybrid Encryption............................................................................. 39
2.3 So sánh Google Tink so với các thư viện mật mã khác. ...................... 42
2.4 Ứng dụng của Google tink...................................................................... 44
2.5 Kết luận .................................................................................................... 45
CHƯƠNG 3: CÀI ĐẶT MÔ PHỎNG CHƯƠNG TRÌNH KÝ SỐ VĂN
BẢN ĐIỆN TỬ VỚI GOOGLE TINK............................................................ 45
3.1. Cấu trúc mã nguồn cài đặt trong Google Tink ................................... 45
3.2. Sơ đồ thiết kế chung chương trình cài đặt mô phỏng ........................ 48
3.3. Xây dựng các modun thực thi ............................................................... 49
3.3.1 Modun tạo khóa ................................................................................ 49
3.3.2 Modun ký số ...................................................................................... 51
3.3.3 Modun kiểm tra ký số........................................................................ 52
3.4 Hoàn thiện, thử nghiệm .......................................................................... 53
KẾT LUẬN ........................................................................................................ 58

5



DANH MỤC KÝ HIỆU, TỪ VIẾT TẮT
Viết tắt

Tiếng Anh

Tiếng việt

AES

Advanced Encryption Standard

Chuẩn mã hóa tiên tiến

DES

Data Encryption Standard

Tiêu chuẩn mã hóa dữ liệu

Elliptic Curve Digital Signature
Algorithm

Thuật tốn chữ ký số trên đường
cong elliptic

Structured Query Language

Ngôn ngữ truy vấn cơ sở dữ liệu

AEAD

ECDSA
TLS
SQL


DANH MỤC BẢNG BIỂU
Bảng 1.1: Các thuật toán và triển khai Crypto ++ .............................................. 12
Bảng 1.2: So sánh các thư viện mật mã..............................................................15


LỜI NÓI ĐẦU
Ngày nay, khi Internet được phổ biến rộng rãi, các tổ chức, cá nhân đều
có nhu cầu giới thiệu thơng tin của mình trên mạng xã hội cũng như thực hiện
các phiên giao dịch trực tuyến. Vấn đề nảy sinh là khi phạm vi ứng dụng của
các ứng dụng Web ngày càng mở rộng thì khả năng xuất hiện lỗi và bị tấn công
càng cao, trở thành đối tượng cho nhiều người tấn cơng với các mục đích khác
nhau. Nhiều nhà phát triển và các tập đoàn lớn sử dụng các kỹ thuật mật mã để
bảo vệ dữ liệu người dùng. Trong mật mã, các lỗi triển khai nhỏ có thể gây ra
những hậu quả nghiêm trọng và việc hiểu cách triển khai mật mã một cách
chính xác là một công việc phức tạp và tốn nhiều thời gian.
Để bắt kịp với xu thế hiện tại, Google – một trong những tập đồn Cơng
nghệ thơng tin lớn nhất thế giới, đã phát hành Tink – một thư viện mật mã đa
ngôn ngữ, đa nền tảng. Với OpenSSL, họ có các ràng buộc phức tạp và thường
tập trung vào các hệ thống cụ thể, chẳng hạn như đối với các tệp DLL trong hệ
thống Windows. Tink là nguồn mở và tập trung vào việc tạo các API đơn giản
và giúp cơ sở hạ tầng dễ di chuyển hơn.
Chính vì thế em đã chọn đề tài “Tìm hiểu, thực thi thư viện mật mã
Google Tink ứng dụng trong ký số văn bản điện tử” làm đề tài nghiên cứu của
mình.



CHƯƠNG 1: TỔNG QUAN THƯ VIỆN MẬT MÃ
1.1 Giới thiệu thư viện mật mã
1.1.1 Khái niệm
Thư viện mật mã là các tập tin mã nguồn được viết bằng ngôn ngữ lập
trình khác nhau như C, C++, Python… Và những tập tin mã nguồn này thực
hiện triển khai cài đặt các thuật tốn mật mã: hệ mật khóa cơng khai, hệ mật
khóa bí mật, hàm băm, chữ ký số, giao thức trao đổi khóa. Các tập tin như vậy
được thiết kế liên hệ mật thiết trong 1 bộ mã nguồn thống nhất.
1.1.2 Vai trò thư viện mật mã
Thư viện mật mã đóng vai trị quan trọng trong việc triển khai các thuật
toán mật mã, nhằm:
- Cung cấp mã nguồn thực thi cho triển khai các giao thức bảo mật như
Ipsec, TLS..
- Cung cấp mã nguồn thực thi cho việc xây dựng các phần mềm bảo mật
dữ liệu: Bitlocker, Winrar, Veracrypt.
- Cung cấp mã nguồn thực thi cho phát triển các phần mềm về triển khai hạ
tầng cơ sở khóa cơng khai: EJBCA, OpenCA, Open XPKI.
- Cung cấp mã nguồn thực thi cho các dự án phát triển sản phẩm phần
mềm bảo mật hoặc truyền thông VoiIP, Bank….
1.2 Một số thư viện mật mã phổ biến hiện nay
1.2.1 OpenSSL
Open SSL là thư viện mật mã mã nguồn mở viết bằng lập trình C và C++
cung cấp mà nguồn cài đặt cho triển khai giao thức bảo mật SSL/TLS.


Hình 1.1: OpenSSL
Lịch sử phát triển: Dự án được cơng bố năm 1998, ngày nay được phát
triển qua rất nhiều phiên bản khác nhau. Phiên bản mới nhất là 3.3 được công
bố năm 2022 trên github.com. Mã nguồn hiện nay được bổ sung thêm các hàm

Assembly Perl.
- Các thuật toán mật mã trong thư viện OpenSSL.

Hình 1.2: Các thuật tốn mật mã trong thư viện OpenSSL
- Ứng dụng OpenSSL
+ Chủ chốt việc triển khai giao thức bảo mật SSL/TLS. Giao thức này
cung cấp chức năng bảo mật đường truyền phổ biến như Web, Mail…


+ Ngồi ra OpenSSL cịn được sử dụng để phát triển các phần mềm bảo
mật hoặc hạ tầng cơ sở khóa cơng khai như OpenXPKI.
1.2.2 Thư viện mật mã Crypto ++
- Crypto ++ là thư viện mật mã nguồn mở được viết bằng ngơn ngữ C++
của tác giả Wei Dai.

Hình 1.3: Crypto++
- Lịch sử phát triển: phát hành đầu tiên năm 1995 và qua rất nhiều
phiên bản khác nhau, phiên bản mới nhất là 8.6 vào tháng 9 năm 2021.
- Thư viện này hiện nay hỗ trợ các chuẩn C++ từ cũ tới mới nhất
C++ 03, C++ 11, C++ 14, C++17.
Các thuật toán hỗ trợ
+ Crypto ++ cung cấp mã nguồn cài đặt cho hầu hết các thuật toán mật mã
phổ biến hiện nay như mã dòng, mã khối, mật mã khóa cơng khai, chế độ hoạt
động mã khối, hàm băm mật mã, chữ ký số… cụ thể các thuật tốn mật mã này
được mơ tả trong bảng 1.1
Bảng 1.1: Các thuật toán và triển khai Crypto ++
Nguyên thủy
mật mã cung

Thuật toán cụ thể


cấp
Bộ tạo số giải

LCG, KDF2, Blum Blum Shub, ANSI X9.17, Mersenne

ngẫu nhiên

Twister, RDRAND và RDSEED


ChaCha8 /12/20, ChaCha20 (phiên bản IETF), HC-128 và HCMã dòng

256, Panama, Rabbit, Salsa20, SOSEMANUK, XSalsa20
Mã khối (Ứng
viên của cuộc thi
AES)

Rijndael (lựa chọn AES), RC6, MARS, Twofish, Serpent, CAST256
ARIA, Blowfish, Camellia, CHAM, HIGHT, IDEA, Kalyna

Mật mã khối

(128/256/512), LEA, RC5, Triple-DES (2 và 3

khác

key), SEED, SHACAL-2, Simon (64/128), Speck (64/128),
SIMECK, Skipjack, SM4, TEA, Threefish (256/512/1024), XTEA


Các chế độ hoạt
động của mật mã ECB, CBC, CTS, CFB, OFB, CTR, XTS
khối
Chế độ mã hóa
xác thực
Lược

đồ

đệm

mật mã khối


xác

thực

thông báo
Hàm băm mật


PKCS # 5, PKCS # 7, Zeros, Một và số không, W3C Padding

VMAC, HMAC, CMAC, CBC-MAC, DMAC, MAC hai đường
BLAKE2 (BLAKE2b và BLAKE2s), Keccak, SHA-1, SHA2 (SHA-224/256/384/512), SHA3, LSH
(256/512), Tiger, WHIRLPOOL, RIPEMD (128/160/256/320 )

Hàm dẫn xuất
khóa dựa trên

mật khẩu
Mật

CCM, GCM, EAX, ChaCha20Poly1305



cơng khai

khóa

PBKDF1 và PBKDF2 từ PKCS # 5, PBKDF từ PKCS # 12 phụ
lục B, Krawczyk và HKDF của Eronen
RSA, DSA, ElGamal, Nyberg-Rueppel (NR), Rabin Williams (RW), LUC, LUCELG, DLIES (các biến thể


của DHAES ), ESIGN, đường cong25519
Sơ đồ đệm cho
hệ thống khóa
cơng khai

PKCS # 1 v2.0, OAEP, PSS, PSSR, IEEE
P1363 EMSA2 và EMSA5
Diffie



Hellman (DH),

Giao thức trao (DH2), Menezes

đổi khóa



Qu

Unified


Diffie



Hellman

Vanstone (MQV), Hashed

MQV (HMQV), Full Hashed MQV (FHMQV), LUCDIF, XTRDH , x25519

Mật mã đường
cong elliptic
Chia sẻ bí mật

ECDSA, ECNR, ECIES, ECDH, ECMQV, Ed25519
Kế hoạch chia sẻ bí mật của Shamir, thuật tốn phân tán thông tin
của Rabin (IDA)

- Ưu điểm: Crypto ++ phát triển trên ngơn ngữ C++ thì có tốc độ nhanh,
Crypto ++ khơng loại bỏ các thuật tốn cũ khơng an tồn nhằm mục đích có sự
tương thích ngược trong việc phát triển bảo mật từ thư viện này. Crypto ++ phát

triển được ứng dụng nhiều nhất trong các phần mềm bảo mật.
1.2.3 GMP
GMP là thư viện miễn phí được viết bằng C và hỗ trợ nhiều hệ điều hành,
nhiều hệ CPU khác nhau. Được phát hành lần đầu tiên vào năm 1991 thư viện
này dành cho việc xử lý số học với các đối tượng là số nguyên, số hữu tỷ và số
thực (dấu phảy động) với độ dài không giới hạn (giới hạn chỉ phụ thuộc vào tài
nguyên của hệ thống).
GMP được xây dựng với mục đích chính là phục vụ cho việc nghiên cứu
lý thuyết mật mã , bảo mật internet, hệ đại số… cũng như xây dựng ứng dụng
liên quan.
GMP là thư viện phong phú với rất nhiều hàm xử lý số học với thuật toán
tốt, tốc độ của GMP có thể nói là nhanh nhất trong số các thư viện tương tự.


Một số chức năng trong GMP:
- Cung cấp khoảng 150 hàm số học số nguyên có dấu high-level (mpz).
- 35 hảm số hữu tỉ high-level (mpq). Các hàm mpz có thế được sử dụng
bằng cách áp dụng cho tử số và mẫu số riêng biệt
- Khoảng 70 hàm số thực high-level (mpf)
- Được xây dựng thành các interface giúp việc tích hợp dễ dàng trên cả C
và C++
1.2.4 JCA
JCA là một phần quan trọng trong JAVA, nó cung cấp một tập các API
dành cho chữ ký số, mã hóa thơng điệp, tạo và xác thực chứng chỉ, mã hóa khối,
mã hóa dịng, mã hóa đối xứng và bất đối xứng, tạo khóa và quản lý khóa, tạo
số ngẫu nhiên an toàn. Tập API này cho phép các nhà phát triển dễ dàng tích
hợp bảo mật vào ứng dụng của mình. Kiến trúc của thư viện được thiết kế dựa
trên các tiêu chí:
- Triển khai độc lập (Implementation independence): ứng dụng khơng cần
triển khai các thuật tốn bảo mật. Thay vào đó, họ có thể sử dụng dịch vụ bảo

mật từ chính nền tảng JAVA.
+ Khả năng tương tác (Implementation interoperability).
+ Khả năng mở rộng thuật toán.
1.3 So sánh các thư viện mật mã
Dưới đây là bảng so sánh các thư viện mật mã phổ biến hiện nay
Bảng 1.2: So sánh các thư viện mật mã
Tên
thực
hiện

Sáng kiến

Cryptl Peter
ib
Gutmann
Crypt
o ++

Dự án Crypto
++

Ngơn
ngữ
triển
khai
chính
C

Phần
mềm


nguồn
mở
Đúng

C ++

Đúng

Bản quyền phần mềm

Giấy phép Sleepycat
hoặc giấy phép thương
mại
Giấy phép Phần mềm
Tăng cường (tất cả các

Bản phát hành mới
nhất

3.4.5 (2019; 3
năm trước)
2 tháng 1 năm 2021
(8.4.0)


tệp riêng lẻ đều là miền
công cộng )
GNU GPLv2 và giấy
18 (ngày 22 tháng 3 năm

phép thương mại
2022; 2 tháng trước )
17.0.2 LTS (18 tháng 1
năm 2022; 4 tháng
trước ) 11.0.14 LTS (18
tháng 1 năm 2022; 4
tháng trước 8u321 LTS
(18 tháng 1 năm 2022; 4
tháng trước
Giấy phép Apache 1.0
Ngày 13 tháng 3 năm
2022
GNU LGPL v2.1 +
Ổn định 1.10.1/ ngày 28
tháng 3 năm 2022
LTS 1,8,9/ ngày 7 tháng
2 năm 2022

Java

Đúng

OpenBSD
Foundation
Cộng đồng
GnuPG và
mã g10

C


Đúng

C

Đúng

Mbed
TLS

Arm Limited

C

Đúng

Giấy phép Apache 2.0

3.0.0 (ngày 7 tháng 7
năm 2021; 10 tháng
trước )
2.27.0 (ngày 7 tháng 7
năm 2021; 10 tháng
trước ) 2.16.11 (ngày 7
tháng 7 năm 2021; 10
tháng trước )

Open
SSL

Dự án

OpenSSL

C

Đúng

Giấy phép Apache
1.0 và Giấy phép BSD
4 khoản

3.0.3 (3 tháng 5 năm
2022; 20 ngày trước)

Các
nhà
cung
cấp
JCA /
JCE
mặc
định

Oracle

Libre
SSL
Libgc
rypt

1.4 Ứng dụng thư viện mật mã

1.4.1 Bảo mật thông tin lưu trữ và xây dựng phần mềm bảo mật
Bảo mật thông tin lưu trữ
Một số thư viện mật mã có thể được sử dụng trực tiếp để bảo mật thơng tin
lưu trữ. Ví dụ: sử dụng OpenSSL để mã hóa, ký số văn bản điện tử:
- Tạo khóa cặp RSA 2048 bit
openssl genpkey -out privkey.pem -algorithm rsa 2048


Khi này tạo được khóa riêng 2048 bit gồm các thơng số P, Q, N và số d (là
số bí mật).
- Khóa cơng khai thu được là khóa cơng khai pubkey.pem và khóa riêng là
privkey.pem.
openssl rsa -in privkey.pem -outform PEM -pubout -out
pubkey.pem
Sử dụng khóa riêng thu được để ký số tập tin .doc với chữ ký số đầu ra
dạng nhị phân:
openssl

dgst

-sha256

-sign

privkey.pem

-out

sign.sha256 client.doc
- Việc kiểm tra chữ ký số được xử lý theo dịng lệnh:

openssl

enc

-base64

-in

sign.sha256

-out

sign.sha256.base64
Sử dụng khóa cơng khai để kiểm tra văn bản tập tin client.doc và ký số
sign.base
- Sử dụng OpenSSL để mã hóa tập tin sample.txt sử dụng khóa keyfile
Có hai lệnh OpenSSL được sử dụng cho mục đích này. Phần đầu tiên
chuyển mã chữ ký base64:
openssl enc -base64 -d -in sign.sha256.base64 -out
sign.sha256
Lần thứ hai xác minh chữ ký:
openssl dgst -sha256 -xác minh pubkey.pem -signature
sign.sha256 client
Kết quả việc xác minh chữ ký thành công như sau:

Verified OK

Sử dụng OpenSSL để mã hóa/giải mã tập tin



- Ví dụ mã hóa tập tin sử dụng mã khối AES cung cấp bởi OpenSSL qua
dòng lệnh
openssl enc -in sample.txt -out sample.txt.enc -e
-aes256 -k keyfile
+ Tập tin đầu vào là sample.txt, tập tin mã đầu ra là sample.txt.enc
+ Thuật tốn mã hóa là AES với khóa độ dài 256 bit, khóa được lấy từ tập tin
keyfile
- Trong ví dụ này thì giải mã sẽ được thực thi theo câu lênh:
openssl

enc

-in

sample.txt.enc

-out

sample_decrypted.txt -d -aes256 -k keyfile
+ Tập tin mã đầu vào là sample.txt.enc và tập tin rõ đầu ra là
sample_decrypted.txt
+ Tập tin khóa là keyfile
Sử dụng để xây dựng phần mềm bảo mật dữ liệu lưu trữ
Phần mềm VeraCrypt là phần mềm mã hóa ổ đĩa hoặc tập tin mã nguồn
mở. VeraCrypt được phát triển từ thư viện Crypto ++.

Hình 1.4: Giao diện đồ họa VeraCrypt


VeraCrypt có giao diện đồ họa (hình ) hoạt động tốt trên các hệ điều hành

Window. Các chức năng chính của Veracrypt:
- Các tính năng chính của VeraCrypt:
+ Tạo, gắn kết và tháo gỡ ổ đĩa mã hóa.
+ Bảo mật dữ liệu và lưu trữ thông tin trong vùng mã hóa.
+ Cho phép hạn chế quyền truy cập thơng tin.
+ Nhiều chế độ mã hóa tùy chọn.
+ Kết hợp thuật tốn bảo vệ.
+ Hỗ trợ nhiều thuật tốn mã hóa phổ biến có độ bảo mật cao như:
Serpent, AES, Twofish, Kuznetchik, Camellia.
+ Hỗ trợ các hàm băm phổ biến đảm bảo tính tồn vẹn của dữ liệu như:
SHA256, SHA512, Streebog, Whirlpool.
- Các chế độ hoạt động VeraCrypt:
+ Mã hóa dữ liệu ổ đĩa
+ Mã hóa tập tin
1.4.2 Bảo mật thơng tin kênh truyền
OpenSSL là thư viện được sử dụng để cài đặt các giao thức mạng phổ biến
như SSL, TLS, SSH, SMIME. Đây đều là giao thức thực hiện bảo mật kênh
truyền cho các dịch vụ mạng quan trọng hiện nay như dịch vụ Web, dịch vụ
Email, dịch vụ truy cập từ xa.
TLS là một giao thức bảo mật cung cấp quyền riêng tư và tính tồn vẹn của
dữ liệu cho truyền thông Internet. Triển khai TLS là một phương pháp tiêu
chuẩn để xây dựng các ứng dụng web an toàn.
Bảo mật lớp truyền tải, hay TLS, là một giao thức bảo mật được chấp nhận
rộng rãi được thiết kế để tạo điều kiện cho quyền riêng tư và bảo mật dữ liệu
cho truyền thông qua Internet. Trường hợp sử dụng chính của TLS là mã hóa
giao tiếp giữa các ứng dụng web và máy chủ, chẳng hạn như trình duyệt web tải
một trang web. TLS cũng có thể được sử dụng để mã hóa các thơng tin liên lạc
khác như email, tin nhắn và thoại qua IP (VoIP).



TLS được đề xuất bởi Lực lượng Đặc nhiệm Kỹ thuật Internet (IETF), một
tổ chức tiêu chuẩn quốc tế và phiên bản đầu tiên của giao thức được xuất bản
vào năm 1999. Phiên bản gần đây nhất là TLS 1.3 , được xuất bản vào năm
2018.
Có ba thành phần chính đối với những gì mà giao thức TLS hồn thành:
Mã hóa, Xác thực và Tính tồn vẹn.
Mã hóa: ẩn dữ liệu được chuyển từ bên thứ ba.
Xác thực: đảm bảo rằng các bên trao đổi thơng tin là chính họ.
Tính tồn vẹn: xác minh rằng dữ liệu khơng bị giả mạo hoặc giả mạo.
+ Sử dụng các thư viện mật mã để nghiên cứu sử dụng mã nguồn trong thư
viện mật mã để nghiên cứu
Giao thức TLS (Transport Layer Security) là một giao thức bảo mật dữ liệu
truyền trên mạng Internet và hoạt động ở tầng giao vận trong kiến trúc mạng
TCP/IP.

TCP/IP Stack
Application
TLS 1.3 Layer

Handshake
Protocol

Record
Protocol

Alert
Protocol

Transport
Internet


Network Access

Hình 1.5: Kiến trúc, vị trí TLS 1.3 trong mơ hình TCP/IP
Giao thức SSL/TLS (Secure Sockets Layer/Transport Layer Security) là
giao thức được sử dụng để bảo mật kênh truyền cho rất nhiều dịch vụ mạng hiện
nay như: Dịch vụ Web, Email, Database, VoIP... TLS 1.3 là phiên bản mới nhất
của giao thức này với nhiều ưu điểm như tốc độ nhanh và độ an toàn cao hơn so
với các phiên bản trước.


TLS 1.3 được công bố vào tháng 8/2018 sau thời gian rất dài kể từ khi bắt
đầu được phát triển bởi IETF năm 2014 và sau 28 bản nháp khác nhau.
TLS 1.3 thực hiện xử lý dữ liệu tầng ứng dụng chuyển xuống trước khi
giao thức tầng vận tải xử lý và có kiến trúc bao gồm 3 giao thức chính (hình
2.7): giao thức bắt tay (Handshake protocol), giao thức bản ghi (Record
protocol), giao thức cảnh báo (Alert protocol).
TLS 1.3 bảo mật kênh trun theo mơ hình mạng Client – Server và có
cách thức được mơ tả
TLS 1.3 được thiết lập ban đầu với giao thức bắt tay gồm 3 bước chính
như sau:
- Bước 1: Phía máy trạm gửi gói Client Hello bao gồm các trường bắt buộc
như một số nguyên ngẫu nhiên, phiên bản TLS… Trong các trường này cần chú
ý hai trường chính:
+ Supported Cipher Suites: Là định danh các bộ thuật tốn mã hóa có xác
thực với dữ liệu liên kết mà bên máy trạm hỗ trợ.
+ Key_share: Đây chính là trường lưu trữ giá trị khóa công khai của máy
trạm dùng để cho thỏa thuận một khóa chủ cho phiên liên lạc này giữa máy trạm
và máy chủ.
- Bước 2: Phía máy chủ gửi lại gói Server Hello bao gồm các trường bắt

buộc. Trong các trường này cần chú ý ba trường chính:
+ Selected Cipher Suite: Là định danh bộ thuật tốn mã hóa có xác thực
bên máy chủ chọn sẽ dùng để mã hóa dữ liệu phiên liên lạc giữa máy trạm và
máy chủ trong phiên liên lạc này.
+ Key share: Đây chính là trường lưu trữ giá trị khóa cơng khai của máy
chủ dùng để cho thỏa thuận một khóa chủ cho phiên liên lạc này giữa máy trạm
và máy chủ.
+ Certificate: Đây là trường mở rộng được bảo mật có nội dung là chứng
thư số của máy chủ cung cấp cho máy trạm để kiểm tra xác thực máy chủ đang
liên lạc.


- Bước 3: Kết thúc quá trình bắt tay với thông điệp Finished và bắt đầu
thực hiện kết nối của giao thức trên tầng ứng dụng.
- Sau khi thực hiện xong giao thức bắt tay, TLS 1.3 sẽ thực hiện giao thức
bản ghi để xử lý phân mảnh dữ liệu gửi từ tầng ứng dụng chuyển xuống
+ Các phân mảnh dữ liệu được mã hóa bởi bộ thuật tốn mật mã đã thỏa
thuận được giữa Client và Server trong quá trình bắt tay trước đó.
Server

Client

1

Client Hello
- Protocol version
- Random data (Nonce)
- Supported Cipher Suites
- Signature_algorithm
- Key_share


Server Hello
- Server Name Idication (sni)
- Random data (Nonce)
- Selected Cipher Suite
- Key_share
- Encrypted_Extension
+ Certificate

2

Finished
Finished
3

Application protocol

5

Application protocol

4

Hình 1.6: Hoạt động giao thức TLS 1.3
+ Khóa phiên mã hóa sử dụng được dẫn xuất từ khóa bí mật thỏa thuận
được giữa hai bên liên lạc trong quá trình bắt tay.
- Trong phiên liên lạc TLS 1.3 được thiết lập và thực thi mọi vấn đề phát
sinh về trạng thái, lỗi kết nối, sai thông số được thông báo dưới dạng các thông
điệp bởi giao thức cảnh báo cho các bên liên lạc.



1.5 Kết luận
Chương 1 đã trình bày được về các thư viện mật mã phổ biến hiện nay
như OpenSSL, Crypto++, GMP, JCA… So sánh các thư viện mật mã này với
nhau và đã đưa ra các ứng dụng phổ biến của thư viện mật mã hiện nay.


CHƯƠNG 2. THƯ VIỆN MẬT MÃ GOOGLE TINK
2.1 Giới thiệu
2.1.1 Thông tin chung
Google Tink là thư viện mật mã mã nguồn mở được viết bởi các nhà mật
mã học và kỹ sư Google. Phiên bản đầu tiên 1.0 phát hành năm 2017, hiện nay
phiên bản mới nhất 1.6.1 vào tháng 7 năm 2022.
Google Tink được thiết và xây dựng với mục đích tạo ra nền tảng mã
nguồn cài đặt mật mã có thể sử dụng 1 cách dễ dàng và đảm bảo an toàn. Hiện
nay tại tập đoàn Google, thư viện mật mã nay đã được triển khai trên nhiều hệ
thống như Gmail, Youtube, Androids,…

Hình 2.1: Logo của Tink
2.1.2 Các ưu điểm Google Tink
Hỗ trợ nhiều ngôn ngữ, Google Tink hiện nay thì hỗ trợ các hàm API mật
mã với các ngôn ngữ phổ biến C, C++, Python, Java. Điều này giúp ích rất lớn
cho các nhà phát triển phần mềm bảo mật trên các nền tảng hiện hành khác
nhau.
- Tink dễ sử dụng: Theo đội ngũ phát triển công bố Google Tink cung cấp
các hàm API rất đơn giản, dễ hiểu, đảm bảo tính bảo mật tránh cạm bẫy trong
mã nguồn cài đặt.


- Độ an tồn của Google Tink có mã nguồn mở vì vậy các nhà phát triển

kiểm tra mã nguồn này.
Google Tink phân tách các API một cách rõ ràng, giúp cho người phát
triển kiểm tra, theo dõi 1 cách dễ dàng hơn.
- Tính tương thích cao của Google Tink: Tương thích hầu hết các thư
viện mật mã hiện có như OpenSSl, Crypto++. Tink cũng hỗ trợ mã hóa hoặc lưu
trữ khóa trong Amazon KMS, Google Cloud KMS, Android Keystore và IOs
Keychain.
2.2 Kiến trúc các lớp thuật toán mật mã
Google Tink được xây dựng và phát triển theo kiến trúc phân thành các lớp
các thuật tốn mật mã. Hình 2.2 mơ tả tổng qt các thuật tốn mật mã mà Tink
hỗ trợ.

Hình 2.2: Thuật tốn mật mã Tink hỗ trợ
- Các thuật toán mà Google Tink hỗ trợ.
+ AEAD: hệ mã xác thực với dữ liệu liên kết.
+ Streaming AEAD: Mã dịng có xác thực với dữ liệu liên kết.


×