BỘ THÔNG TIN VÀ TRUYỀN THÔNG HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG BÁO CÁO CUỐI KÌ CHUYÊN ĐỀ AN TOÀN PHẦN MỀM Đề tài “Xây dựng server xác thực 2FA bằng Google Authenticator” Người hướng dẫn TS HUỲNH.
Trang 1BỘ THÔNG TIN VÀ TRUYỀN THÔNG HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
Người hướng dẫn : TS HUỲNH TRỌNG THƯA
Sinh viên thực hiện : NGUYỄN HOÀN NAM DƯƠNG
Mã số sinh viên : N14DCAT032
Khóa : 2014 – 2019
Hệ : ĐẠI HỌC CHÍNH QUY
TP.HCM, tháng 11/2018
Trang 3BỘ THÔNG TIN VÀ TRUYỀN THÔNG HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
Người hướng dẫn : TS HUỲNH TRỌNG THƯA
Sinh viên thực hiện : NGUYỄN HOÀN NAM DƯƠNG
Mã số sinh viên : N14DCAT032
Khóa : 2014 – 2019
Hệ : ĐẠI HỌC CHÍNH QUY
TP.HCM, tháng 11/2018
Trang 4MỤC LỤC
Chương I: ĐẶC TẢ ỨNG DỤNG 1
1.1 Những vấn đề cơ bản 1
1.1.1 2FA là gì ? 1
1.1.2 Google Authenticator là gì? 1
1.2 Khả năng ứng dụng của đề tài 2
1.3 Một số hình ảnh 2
CHƯƠNG II : THIẾT KẾ ỨNG DỤNG 5
2.1 Thuật toán HMAC-Based One-Time Password Algorithm (HOTP) 5
2.1 Thuật toán TOTP (Time-based One-time Password) 7
2.3 Mô hình ứng dụng 10
CHƯƠNG III: XÂY DỰNG ỨNG DỤNG 12
3.1 Chuẩn bị 12
3.2 Thực thi ứng dụng 12
CHƯƠNG IV: KẾT QUẢ ỨNG DỤNG 15
4.1 Đăng kí và đăng nhập đúng mã QR code 15
4.2 Người dùng nhập sai mã do sai lệch hoặc không đồng bộ về thời gian 16
TÀI LIỆU THAM KHẢO 17
Trang 5DANH MỤC HÌNH ẢNH
Hình 1.1 Google Authenticator 1
Hình 1.2: Giao diện trang đăng nhập 3
Hình 1.3 Giao diện trang đăng kí 3
Hình 2.1 Thuật toán HOTP 7
Hình 2 2 Sinh OTP trong thuật toán HOTP 10
Hình 2.3 Mô hình ứng dụng tổng quát 11
Hình 2.4 Mô hình sữ dụng thuật toán TOTP của ứng dụng 11
Hình 3.1 Code sinh khóa ngẫu nhiên 13
Hình 3.2 Hàm tạo QR code 14
Hình 3.3 Hàm tínnh OTP phía server 14
Hình 3.4 Hàm kiểm tra lại OTP người dùng nhập và OTP của server sinh ra 15
Hình 4.3 Người dùng nhập mã nhưng không hợp lệ 17
Trang 6BÁO CÁO CHUYÊN ĐỀ AN TOÀN PHẦM MỀM Chương 1: Đặc tả ứng dụng
Chương I: ĐẶC TẢ ỨNG DỤNG1.1 Những vấn đề cơ bản
1.1.1 2FA là gì ?
2FA là viết tắt của từ Two-factor authentication, nghĩa là xác thực 2 yếu tố hay xác minh 2bước, đây là một tính năng bảo mật cực kỳ hiệu quả, giúp người dùng tránh khỏi nguy cơ bịđăng nhập các tài khoản mạng trái phép, chẳng hạn như: Tài khoản google (gmail), tài khoảnfacebook, hay tài khoản các sàn giao dịch tiền mã hóa,…
Thông thường, khi đăng nhập vào một tài khoản một trang mạng nào đó, người dùng chỉcần nhập tên đặng nhập hoặc địa chỉ email cộng với mật khẩu là có thể đăng nhập và sử dụngtài khoản Những thông tin như vậy sẽ rất dễ dàng bị hacker đánh cắp và tất nhiên bạn sẽ bịmất tài khoản, rất nguy hiểm
Khi sử dụng bảo mật 2FA, ngoài việc sử dụng tên đặng nhập hoặc địa chỉ email và mậtkhẩu thì người dùng còn phải nhập mã bảo mật 2FA mới có thể đăng nhập Mã 2FA mỗi lầnđăng nhập sẽ có một mã mới, có thể là được nhận từ tin nhắn SMS về số điện thoại do hệthống gửi đến trong mỗi lần đăng nhập, hoặc có thể là lấy từ ứng dụng 2FA được cài trên mộtthiết bị nào đó như điện thoại, máy tính bảng
1.1.2 Google Authenticator là gì?
Hiện nay tình trạng đánh cắp tài khoản, dữ liệu người dùng xảy ra khá nhiều sẽ rất nguy hiểm nếu như tài khoản của chúng ta rơi vào tay kẻ xấu Và để tăng tính bảo mật cho dịch vụ của mình thì Google đã phát triển một tính năng có tên là Google Authenticator, đây là một trong những tính năng bảo mật 2 lớp rất hiệu quả của Google dựa trên thuật toán Time-Based One-Time Password (TOTP)
Google Authenticator có chức năng là tạo một dãy mã code, khi bạn đăng nhập bất kì tài khoản nào có bật chức năng xác thực hai yếu tố như Google, Facebook, Binance của mình ở
NGUYỂN HOÀN NAM DƯƠNG N14DCAT032 1
Hình 1.1 Google Authenticator
Trang 7BÁO CÁO CHUYÊN ĐỀ AN TOÀN PHẦM MỀM Chương 1: Đặc tả ứng dụng
bất cứ thiết bị nào thì sau khi nhập mật khẩu người dùng sẽ phải nhập mã code do ứng dụng Google Authenticator tạo ra Đặc biệt ở chỗ là cứ 30 giây thì ứng dụng Google Authenticator
sẽ lại thay đổi một mã code mới vì vậy tài khoản đó sẽ được bảo về tối đa
1.2 Khả năng ứng dụng của đề tài
Ứng dụng được xây dựng là nền tảng cơ bản nhất đối với những ứng dụng cần dùng đến việc bảo vệ an toàn cho tài khỏa như các website thương mại điện tử, sàn giao dịch trực tuyến hay những website có lưu trữ thông tin quan trọng của người dùng
Ứng có khả năng cung cấp bảo mật và thực hiện việc xác thực đối với tài khoản người dùng thông qua Google Authenticator đã và đang được sữ dụng như một biện pháp giúp đảm bảo an toàn cho tài khoản người dùng
1.3 Một số hình ảnh.
Hình 1.2: Giao diện trang đăng nhập
NGUYỂN HOÀN NAM DƯƠNG N14DCAT032 2
Trang 8BÁO CÁO CHUYÊN ĐỀ AN TOÀN PHẦM MỀM Chương 1: Đặc tả ứng dụng
Hình 1.3 Giao diện trang đăng kí
Hình 1.4 Giao diện trong lần đăng nhập đầu tiên
NGUYỂN HOÀN NAM DƯƠNG N14DCAT032 3
Trang 9BÁO CÁO CHUYÊN ĐỀ AN TOÀN PHẦM MỀM Chương 1: Đặc tả ứng dụng
Hình 1.5 Giao diện ở lần đăng nhập thứ 2 trở đi
Hình 1.6 Giao diện trang dashboard khi đăng nhập thành công
NGUYỂN HOÀN NAM DƯƠNG N14DCAT032 4
Trang 10BÁO CÁO CHUYÊN ĐỀ AN TOÀN PHẦM MỀM Chương 2: Thiết kế ứng dụng
CHƯƠNG II : THIẾT KẾ ỨNG DỤNG
2.1 Thuật toán HMAC-Based One-Time Password Algorithm (HOTP)
HOTP là một thuật toán sinh mật khẩu OTP dựa trên hàm hash SHA-1
Về cách sinh mật khẩu OTP sử dụng thuật toán
Trong công thức (1):
có được mật khẩu OTP
Phương pháp tách chuỗi như sau:
HMAC_SHA-1(K,C)=SHA-1(K⊕C1… ∥ SHA-1(K⊕ C2… ∥ C)) (2)
Trong công thức (2):
hàm băm SHA-1 của giá trị K và bộ đếm C
Kết quả đầu ra của hàm HMAC_SHA-1(K,C) cho ta một giá trị có độ dài là 160 bits =
20 bytes, chúng ta dùng hàm tách chuỗi (Truncate) để tách từ chuổi 160 bits thành một chuỗi mới có độ dài 32 bit, sau đó tính modulo để được mật khẩu OTP Cụ thể như sau:
Từ kết quả đầu ra 160 bit của hàm HMAC_SHA1(K,C), ta lấy 4 bit thấp của byte cuối cùng chuyển sang cơ số 10 để tìm vị trí offset, sau đó ta được chuỗi 4 bytes = 32 bit tính từ vị trí offset
Giá trị mật khẩu được tính theo công thức sau:
HOTPvalue = HOTP(K,C) mod 10d (3)
Trong công thức 3: d là số chữ số của OTP, thông thường một mật khẩu OTP sinh ra có độ dài
từ 6 đến 8 chữ số (ví dụ là: 123456, )
Ở đây, giá trị bí mật K được chia sẻ giữa máy chủ xác thực và máy trạm phía người dùng qua một kênh liên lạc nào đó Sau đó máy chủ xác thực sử dụng giá trị bí mật K, bộ đếm C để sinh mật khẩu OTP theo công thức (2), máy trạm phía người dùng cũng sử dụng thiết bị sinh mật khẩu OTP như Token để sinh mật khẩu OTP (Token lưu giá trị bí mật K được chia sẻ và bộ đếm
NGUYỂN HOÀN NAM DƯƠNG N14DCAT032 5
Trang 11BÁO CÁO CHUYÊN ĐỀ AN TOÀN PHẦM MỀM Chương 2: Thiết kế ứng dụng
C) Để xác thực, máy chủ sẽ so sánh mật khẩu OTP sinh ra trên máy chủ với mật khẩu OTP
sinh ra từ máy trạm phía người dùng, nếu giống nhau, người dùng trên máy trạm xác thực thànhcông
Kênh chia sẻ K
Trong nhiều trường hợp, vấn đề xác thực giữa máy chủ xác thực và máy trạm phía người dùng sẽ sảy ra quá trình mất đồng bộ giá trị mật khẩu vì vậy, muốn người dùng đăng nhập hệ
thống thực thành công, chúng ta có thể phân tích quá trình đồng bộ giá trị sinh mật khẩu OTP
giữa máy chủ xác thực và máy trạm phía người dùng đối với thuật toán sinh OTP dựa trên sự kết hợp của HMAC và hàm băm SHA-1 như sau:
Thông thường, trên máy chủ xác thực của bên cung cấp dịch vụ cho người dùng sẽ thực hiện sinh mật khẩu OTP
Trên máy trạm phía người dùng sẽ sử dụng ứng dụng sinh mật khẩu OTP, sau đó khi xác thực, máy chủ sẽ kiểm tra mật khẩu OTP sinh ra trên máy trạm từ phía người dùng có giống với mật khẩu OTP được sinh ra trên máy chủ hay không Nếu mật khẩu OTP giống nhau, người dùng
sẽ được xác thực và sử dụng dịch vụ của hệ thống Trong một số trường hợp, vấn đề mất đồng bộ xảy ra khi người dùng sử dụng thiết bị sinh OTP như Token và ấn nút sinh OTP nhiều lần nhưng không sử dụng hoặc trong quá trình đăng nhập bị lỗi,… dẫn đến mật khẩu OTP sinh ra từ phía người dùng không giống với mật khẩu sinh ra từ phía máy chủ xác thực, khi đó người dùng xác thực không thành công Để
giải quyết được vấn đề này, quá trình đồng bộ giá trị sinh mật khẩu OTP trên máy chủ xác thực
và máy trạm phía người dùng sẽ được thực hiện như sau:
NGUYỂN HOÀN NAM DƯƠNG N14DCAT032 6
Server xác thực
Sinh OTP theo thuật
toán HOTP hoặc TOTP
Phía người dùng
Sữ dụng Token hay phầnmềm sinh OTP (đã đượcđồng bộ với Server)
HMACSHA-1
6-8 sốTRUNKCATE()
Giá trị bí mật (K)
160bit
Mã OTP
Counter (C)
Thuật toán HOTP
Hình 2.4 Thuật toán HOTP
Trang 12BÁO CÁO CHUYÊN ĐỀ AN TOÀN PHẦM MỀM Chương 2: Thiết kế ứng dụng
được bởi hàm: HMAC_SHA1(Key, Counter_Client).
HMAC_SHA1(Key,Counter_Server).
Counter của máy trạm và máy chủ
đồng bộ)
2.1 Thuật toán TOTP (Time-based One-time Password)
Đối với thuật toán HOTP đã trình bày ở phần trên, mật khẩu OTP được sinh ra dựa vào giá trị bí mật (K) được chia sẻ và một giá trị đếm (C) Còn đối với thuật toán TOTP được định nghĩa RFC 6238 là một thuật toán cũng tương tự như HOTP nhưng dựa trên thời gian T(Time) thay vì giá trị đếm C (Counter)
Với thuật toán TOTP sinh mật khẩu OTP dựa theo thời gian thì giá trị T về thời
gian được tính như sau:
Trong công thức (4):
điểm của Unix Epoch là ngày 01/01/1970 theo UTC (giờ chuẩn
quốc tế)
- T0: Là giá trị thời gian ban đầu (thường chọn T0 = 0)
- X: Là bước thời gian, đây là tham số quyết định thời gian hợp lệ của mật khẩu OTP
- T chính là kết quả tính (đã lấy phần nguyên) từ công thức tính toán trên
Với thuật toán TOTP thì thời gian chuẩn hợp lệ của mật khẩu OTP là 30 giây (X=30), thời gian có hiệu lực của mỗi lần sử dụng mật khẩu OTP là 30 giây được chọn phù hợp với yêu cầu vềbảo mật và khả năng sử dụng
Thuật toán TOTP dựa trên thuật toán HOTP thay giá trị đếm (C) bằng giá trị thời gian (T):
NGUYỂN HOÀN NAM DƯƠNG N14DCAT032 7
(4)
Trang 13BÁO CÁO CHUYÊN ĐỀ AN TOÀN PHẦM MỀM Chương 2: Thiết kế ứng dụng
TOTP = HOTP(K,T) (5)
Đối với thuật toán TOTP độ dài của mật khẩu OTP được tính như sau:
TOTPvalue = TOTP(K,T) mod 10d (6)
- Giả sử thời gian hiện tại trong đồng hồ bên máy trạm khi thực hiện việc xác thực với máy chủ xác thực là T1, và thời gian phía máy chủ là T'1 Như vậy, thời gian trên máy chủ với máy trạm không trùng
khi đó giá trị T trên máy trạm được tính là: TClient = [T1/30]
- Đối với máy chủ xác thực thì: TServer = [T1'/30] và Server sẽ sinh mật khẩu
Khi đó, mật khẩu OTP trên máy trạm dùng để xác thực với máy chủ sẽ không phù hợp và xác thực sẽ không thành công
- Để việc xác thực được thành công, máy chủ sẽ thực hiện tính toán và thay đổi
giá trị sao cho phù hợp
trị khác lần lượt là: HOTP(K,TServer + a) với a là giá trị thời gian tính bằng giây
khẩu OTP được sinh ra trên máy trạm, máy chủ sẽ cho phép người dùng trên máy trạm xác thực
NGUYỂN HOÀN NAM DƯƠNG N14DCAT032 8
Trang 14BÁO CÁO CHUYÊN ĐỀ AN TOÀN PHẦM MỀM Chương 2: Thiết kế ứng dụng
Hình 2 5 Sinh OTP trong thuật toán HOTP
Ví dụ về sinh mật khẩu OTP theo thuật toán TOTP:
Giả sử tính được HMAC_SHA-1(Secret (K),Time (T)) (160bit) là:
1f |86 | 98 | 69| 0e | 02 | ca | 16 | 61 | 85 | 50 | ef | 7f | 19 | da | 8e | 94 | 5b | 55 | 5a
Sau đó, sử dụng hàm tách chuỗi Truncate(HMAC_SHA-1(K,C)) (32 bit) Cụ thể tách như sau:
- Lấy 4 bits thấp của byte cuối cùng, trong ví dụ trên thì byte cuối cùng là một giá trị hexa
là 5a (01011010 theo cơ số 2), 4 bits thấp nhất của byte cuối cùng này là 1010 tương ứng là 10
(trong hệ cơ số 10)
- Lấy tiếp 4 bytes từ vị trí Offset 10 (đếm từ 0) ta sẽ có: 50 | ef | 7f | 19
- Giá trị có được là: 0x50ef7f19, đổi sang cơ số 10 ta được giá trị mới là:
1357872921 Đây chính là chuỗi vừa được hàm truncate () tách ra từ mã xác thực thông
điệp MAC
Thông thường mật khẩu OTP hiện nay có độ dài từ 6 đến 8 chữ số, theo thuật toán sinh OTP dựa trên đồng bộ về thời gian (TOTP) ta có thể có được mật khẩu OTP mới có độ dài tùy chọn theo công thức (6) Dựa vào công thức (6) sinh được mật khẩu OTP có độ dài 6 chữ số tương
ứng là: 872921.Đây chính là mật khẩu OTP được sinh ra và hiển thị trên ứng dụng của người
dùng, mật khẩu OTP này sẽ thay đổi theo thời gian (mặc định là sau 30 giây sẽ thay đổi) Người dùng sẽ nhập mật khẩu này để xác thực với máy chủ xác thực Máy chủ xác thức sẽ sinh mật khẩu OTP và kiểm tra mật khẩu OTP được sinh ra trên ứng dụng phía người dùng, nếu giống nhau người dùng xác thực thành công
NGUYỂN HOÀN NAM DƯƠNG N14DCAT032 9
Trang 15BÁO CÁO CHUYÊN ĐỀ AN TOÀN PHẦM MỀM Chương 2: Thiết kế ứng dụng
2.3 Mô hình ứng dụng
Ứng dụng có thể được mô tả như sau:
NGUYỂN HOÀN NAM DƯƠNG N14DCAT032 10
Hình 2.6 Mô hình ứng dụng tổng quát
(1) Khóa bí mật được sinh ngẫu nhiên
(3) Client tính toán mã OTP dùng K và Tclient
Hình 2.7 Mô hình sữ dụng thuật toán TOTP của ứng dụng
Trang 16BÁO CÁO CHUYÊN ĐỀ AN TOÀN PHẦM MỀM Chương 2: Thiết kế ứng dụng
- Khi người dùng đăng kí vào hệ thống, hệ thống sẽ tự động sinh khóa bí mật ngẫu
nhiên và hiển thị dưới dạng QR code chứa token dạng:
otpauth://totp/{email}?secret={khóa bí mật}&issuer=Duong2FA
- Đầu vào của thuật toán TOTP là chuổi mã bí mật được decode base32 ( vì Google bí
mật bao gồm cả dấu cách và bằng chữ in thường nên cần loại bỏ dấu cách chuyểnchúng về chữ in hoa) và thời gian hiện tại của server/client
- Dùng hàm mã hóa HMAC-SHA1 để mã hóa thời gian và mã bí mật đã được decode,
kết quả nhận được là một chuổi có chiều dài 20byte (160bit)
- Lấy 4 bit cuối cùng đổi sang dạng hex để tính offset.
- Chuổi 32 bit mới được lấy ra từ vị trí offset trong kết quả của hàm HMAC-SHA1.
(trunkcate())
- Giá trị của OTP được tính dựa trên công thức (6)
- Người dùng nhập dữ liệu để server tiến hành so sánh 2 mã OTP nếu trùng khớp người
dùng đã xác thực thành công
NGUYỂN HOÀN NAM DƯƠNG N14DCAT032 11
Trang 17BÁO CÁO CHUYÊN ĐỀ AN TOÀN PHẦM MỀM Chương 3: Xây dựng ứng dụng
CHƯƠNG III: XÂY DỰNG ỨNG DỤNG
3.1 Chuẩn bị
- Apache Web Server
- Công cụ lập trình PHP 7 ( Visual Code)
- Điện thoại, máy tính bảng có cài Google Authenticator
3.2 Thực thi ứng dụng
NGUYỂN HOÀN NAM DƯƠNG N14DCAT032 12
Hình 3.8 Code sinh khóa ngẫu nhiên
Trang 18BÁO CÁO CHUYÊN ĐỀ AN TOÀN PHẦM MỀM Chương 3: Xây dựng ứng dụng
NGUYỂN HOÀN NAM DƯƠNG N14DCAT032 13
Hình 3.9 Hàm tạo QR code
Hình 3.10 Hàm tínnh OTP phía server
Trang 19BÁO CÁO CHUYÊN ĐỀ AN TOÀN PHẦM MỀM Chương 3: Xây dựng ứng dụng
NGUYỂN HOÀN NAM DƯƠNG N14DCAT032 14
Hình 3.11 Hàm kiểm tra lại OTP người dùng nhập và OTP của server sinh ra
Trang 20BÁO CÁO CHUYÊN ĐỀ AN TOÀN PHẦM MỀM Tài liệu tham khảo
CHƯƠNG IV: KẾT QUẢ ỨNG DỤNG4.1 Đăng kí và đăng nhập đúng mã QR code
- Khi người dùng đã nhập username mật khẩu hợp lệ và chuyển sang trang nhập mã
( trường hợp đăng nhập sẽ không có mã QR) hoặc quét mã ( trường hợp đăng kí)người dùng cần nhập đoạn mã hợp lệ sinh ra từ ứng dụng Google Authenticator.Server sẽ tiến hành xác nhận nếu đúng người dùng sẽ được xem là hợp lệ và chuyểnsang trang dashboard
4.2 Người dùng nhập sai mã do sai lệch hoặc không đồng bộ về thời gian
NGUYỂN HOÀN NAM DƯƠNG N14DCAT032 15
Hình 4.2 Trang dashboard Hình 4.1 Người dùng nhập đúng mã
Trang 21BÁO CÁO CHUYÊN ĐỀ AN TOÀN PHẦM MỀM Tài liệu tham khảo
- Trường hợp đăng kí hay đăng nhập người dùng không nhập đúng mã hoặc server xác thực
sinh ra mã xác nhận không trùng khớp ( do sai lệch về thời gian) hệ thống sẽ thông báo lỗi và không công nhận là một người dùng hợp lệ
NGUYỂN HOÀN NAM DƯƠNG N14DCAT032 16
Hình 4.12 Người dùng nhập mã nhưng không hợp lệ
Trang 22BÁO CÁO CHUYÊN ĐỀ AN TOÀN PHẦM MỀM Tài liệu tham khảo
TÀI LIỆU THAM KHẢOWebsite tham khảo: