Nghiên cứu xây dựng hệ thống xác thực đa nhân tố cho Website
Xác thực là việc xác lập hoặc chứng thực một
thực thể đáng tin cậy, có nghĩa là những
thông tin do một người đưa ra hoặc về một cái
gì đó là đúng đắn. Xác thực một đối tượng
còn có nghĩa là công nhận nguồn gốc của đối
tượng, còn xác thực một người thường bao
gồm việc thẩm tra nhận dạng cá nhân của họ.
Xác thực là khâu đặc biệt quan trọng để bảo
đảm an toàn cho hoạt động của một hệ thống
thông tin. Đó là một quy trình nhằm xác minh
nhận dạng số của bên gửi thông tin trong liên
lạc trao đổi, xử lý thông tin, chẳng hạn như
một yêu cầu đăng nhập [1]. Mật khẩu đăng
nhập là một dạng xác thực danh tính người
dùng. Người dùng sẽ sử dụng nó để đăng
nhập vào website, ứng dụng và dữ liệu.
Nhưng kiểu xác thực danh tính truyền thống
này dễ dàng bị hacker bẻ khóa. Để tăng tính
an toàn cho quá trình xác thực, giải pháp xác
thực đa nhân tố đã được sử dụng. Xác thực đa
nhân tố là sự kết hợp tối thiểu của 2 trong 3
nhân tố sau đây [2]:
- Something that you have: Những gì mà chỉ
bạn mới có. Chẳng hạn như thẻ thông minh,
thiết bị token của ngân hàng.
- Something that you are: Những gì thuộc về
sinh trắc của bạn. Ví dụ như đồng tử, tròng
mắt, dấu vân tay hay giọng nói của bạn.
- Something that you know: Những gì mà chỉ
bạn mới biết. Là những thông tin mà một
mình bạn tạo ra như: tên đăng nhập, mật khẩu
đăng nhập, tên người thân của bạn, ngôi
trường cấp 3 của bạn,.
Trang 1
Trang 2
Trang 3
Trang 4
Trang 5
Trang 6
Trang 7
Tóm tắt nội dung tài liệu: Nghiên cứu xây dựng hệ thống xác thực đa nhân tố cho Website
ctor authentication; OTP code; HOTP code; TOTP code; QR code. Received: 14/4/2020; Revised: 30/5/2020; Published: 31/5/2020 * Corresponding author. Email: dangxuanbao.attt@gmail.com Đặng Xuân Bảo và Đtg Tạp chí KHOA HỌC & CÔNG NGHỆ ĐHTN 225(06): 479 - 485 Email: jst@tnu.edu.vn 480 1. Giới thiệu Xác thực là việc xác lập hoặc chứng thực một thực thể đáng tin cậy, có nghĩa là những thông tin do một người đưa ra hoặc về một cái gì đó là đúng đắn. Xác thực một đối tượng còn có nghĩa là công nhận nguồn gốc của đối tượng, còn xác thực một người thường bao gồm việc thẩm tra nhận dạng cá nhân của họ. Xác thực là khâu đặc biệt quan trọng để bảo đảm an toàn cho hoạt động của một hệ thống thông tin. Đó là một quy trình nhằm xác minh nhận dạng số của bên gửi thông tin trong liên lạc trao đổi, xử lý thông tin, chẳng hạn như một yêu cầu đăng nhập [1]. Mật khẩu đăng nhập là một dạng xác thực danh tính người dùng. Người dùng sẽ sử dụng nó để đăng nhập vào website, ứng dụng và dữ liệu. Nhưng kiểu xác thực danh tính truyền thống này dễ dàng bị hacker bẻ khóa. Để tăng tính an toàn cho quá trình xác thực, giải pháp xác thực đa nhân tố đã được sử dụng. Xác thực đa nhân tố là sự kết hợp tối thiểu của 2 trong 3 nhân tố sau đây [2]: - Something that you have: Những gì mà chỉ bạn mới có. Chẳng hạn như thẻ thông minh, thiết bị token của ngân hàng. - Something that you are: Những gì thuộc về sinh trắc của bạn. Ví dụ như đồng tử, tròng mắt, dấu vân tay hay giọng nói của bạn... - Something that you know: Những gì mà chỉ bạn mới biết. Là những thông tin mà một mình bạn tạo ra như: tên đăng nhập, mật khẩu đăng nhập, tên người thân của bạn, ngôi trường cấp 3 của bạn,... Xác thực đa nhân tố thường hay được sử dụng trong lĩnh vực như kinh doanh online, ngân hàng, mạng xã hội... Hiện nay, trong xác thực đa nhân tố, nhân tố đầu tiên được sử dụng thường là mật khẩu do người dùng cài đặt, còn nhân tố thứ hai thường là mật khẩu sử dụng một lần (OTP). Đối với mật khẩu sử dụng một lần, mã OTP (hình 1) và Token vật lý (hình 2) là hai lựa chọn được sử dụng nhiều nhất hiện nay [3]. Hình 1. Mã OTP được gửi qua tin nhắn khi thực hiện giao dịch ngân hàng điện tử Techcombank Hình 2. Token key sinh mã OTP khi thực hiện giao dịch ngân hàng điện tử Techcombank Tuy nhiên, chi phí khi sử dụng mã OTP là rất lớn (phí tin nhắn, phí thiết bị). Vì vậy, trong bài báo này chúng tôi trình bày giải pháp xây dựng xác thực đa nhân tố sử dụng hệ thống phần mềm, giúp tiết kiệm chi phí cho quá trình xác thực đa nhân tố. Thực nghiệm được tiến hành trên một website giả định. 2. Giải pháp và công nghệ thực hiện Hiện nay có hai cách sinh mã OTP là sinh theo phương pháp đồng bộ bộ đếm (RFC- 4226) và sinh theo phương pháp đồng bộ thời gian (RFC-6238). Theo RFC-4226, thuật toán sinh OTP dựa trên đồng bộ bộ đếm được gọi là HMAC-Based One-Time Password Algorithm (HOTP), với HOTP (K,C) =Truncate (HMAC_SHA-1(K,C)) (1) Trong đó: - K: Giá trị chia sẻ bí mật giữa Client và Server. - C: Bộ đếm đã được đồng bộ giữa Client và Server, C có độ dài 8 bytes. - Truncate(): Hàm tách chuỗi, thực hiện việc trích xuất kết quả từ hàm băm Hash để có được mật khẩu OTP. Đặng Xuân Bảo và Đtg Tạp chí KHOA HỌC & CÔNG NGHỆ ĐHTN 225(06): 479 - 485 Email: jst@tnu.edu.vn 481 - HMAC_SHA-1(K,C) là một hàm tính toán dựa trên thuật toán HMAC kết hợp với hàm băm SHA-1 của giá trị K và bộ đếm C. HMAC_SHA-1(K,C)=SHA-1(K⊕C1 ∥ SHA-1(K⊕ C2 ∥ C)) (2) với: - C1 = 0x36 (36 trong hệ thập lục phân). - C2 = 0x5c (5C trong hệ thập lục phân). Giá trị mật khẩu được tính theo công thức: HOTP = HOTP(K,C) mod 10d (3) Trong đó: 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ố. Hình 3. Sơ đồ mô tả thuật toán HOTP sinh mật khẩu OTP Tiêu chuẩn RFC 6238 dựa vào thuật toán Time-based One Time Password (TOTP). Nó có phương thức hoạt động tương tự HOTP đã trình bày ở mục trên. TOTP cũng có hai nhân tố là khoá chia sẻ và một bộ đếm (giống như giá trị K và C trong HOTP), nhưng bộ đếm của TOTP hoạt động khác so với HOTP. Cụ thể 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: T = (Tcurrent_unix_time − T0) / X (4) Trong công thức (4) ở trên: - Tcurrent_unix_time là giá trị thời gian hiện tại được tính theo thời gian Unix (được tính từ thời đ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 là kết quả tính (đã lấy phần nguyên) từ công thức tính toán trên. Thuật toán TOTP dựa trên thuật toán HOTP (RFC-4226) thay giá trị đếm (C) bằng giá trị thời gian (T): 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: TOTP = TOTP(K, T) mod10d (6) Trong công thức (6): d là số chữ số của mật khẩu OTP. Cũng giống với HOTP, TOTP thông thường cũng có độ dài từ 6 đến 8 ký tự. So sánh hai phương pháp này, phương pháp sinh mã OTP theo đồng bộ thời gian an toàn hơn vì đảm bảo việc mã OTP được sinh ra chỉ có tác dụng trong một thời gian ngắn chọn trước, còn đối với mã OTP được sinh ra theo phương pháp đồng bộ đếm thời gian tác dụng phụ thuộc vào số sự kiện đăng nhập và có thể tồn tại một khoảng thời gian dài, dẫn đến việc có thể bị tìm ra [4]. Vì vậy, trong nghiên cứu này lựa chọn phương pháp sinh mã OTP theo đồng bộ thời gian (RFC-6238). Với phương pháp đồng bộ thời gian, mã OTP được sinh theo thuật toán Time-based One Time Password [5]. Trong thuật toán Time-based One Time Password việc lựa chọn tham số X là rất quan trọng, ảnh hưởng đến hoạt động của hệ thống. Nếu X quá lớn sẽ giúp kẻ tấn công dò ra được mã OTP, nếu X quá bé sẽ gây khó khăn cho người dùng. Trong RFC-6238 thời gian X mặc định là 30 giây. Để đảm bảo tính bí mật của khóa chia sẻ, việc gửi khóa chia sẻ được thực hiện thông qua mã QR [6]. 3. Thiết kế xây dựng hệ thống Cấu trúc hệ thống Như vậy, hệ thống xác thực đa nhân tố cho website bao gồm những thành phần sau đây: máy chủ sinh mã QR; máy chủ web; máy chủ cơ sở dữ liệu; ứng dụng đọc mã QR và sinh mã OTP trên điện thoại của người dùng (hình 4). Đặng Xuân Bảo và Đtg Tạp chí KHOA HỌC & CÔNG NGHỆ ĐHTN 225(06): 479 - 485 Email: jst@tnu.edu.vn 482 - Máy chủ sinh mã QR làm nhiệm vụ sinh khóa chia sẻ, đóng gói khóa chia vào một mã QR và gửi tới ứng dụng đọc mã QR trên máy người dùng thông qua giao diện trên máy chủ web. - Ứng dụng đọc mã QR trên máy người dùng đọc mã QR từ máy chủ gửi đến, lấy khóa chia sẻ và sinh mã OTP theo RFC-6238. Mã OTP được sinh ra sẽ sử dụng trong quá trình đăng nhập của người dùng. - Máy chủ web tiến hành xác thực người dùng bằng mật khẩu và mã OTP - Máy chủ cơ sở dữ liệu lưu dữ liệu của từng người dùng như tên đăng nhập, mật khẩu, mã QR... Hình 4. Hệ thống xác thực đa nhân tố cho website 4. Tích hợp hệ thống token mềm trong quá trình xác thực người dùng Modul xác thực được xây dựng dựa trên sự kết hợp đăng nhập bằng username và mật khẩu cộng với việc xác thực mã OPT. Người dùng sẽ phải đăng kí tài khoản với hệ thống thương mại điện tử. Sau đó người dùng có thể tùy chỉnh bật tắt tính năng xác thực hai lớp trong phần cài đặt. Khi bật tính năng xác thực hai lớp phía server sẽ tạo ra một mã QR có dạng như sau: optauth://totp/%3A?secret= &digits=&issuer= (7) Trong đó - Host: sẽ là tên miền của hệ thống. - Username: tên đăng nhập của người dùng. - serect: là khóa bí mật được hệ thống tạo ra. Để có thể thực hiện việc xác thực bằng mã QR, đầu tiên người dùng cần bật tính năng này. Sau khi bật thành công máy chủ sẽ sinh một mã QR có dạng (7) khác nhau cho mỗi người dùng. Người dùng sử dụng phần mềm đọc mã QR trên điện thoại để nhận khóa bí mật làm tham số đầu vào cho quá trình sinh mã OTP. Trong phạm vi bài báo này phần mềm đọc mã QR được sử dụng là Google Autheticator [7]. Sau đó người dùng sử dụng mật khẩu và mã OTP được sinh ra để tiến hành xác thực khi đăng nhập. Trình tự hành động của người dùng được nêu trong hình 5. Với lần đăng nhập đầu tiên vào website, người dùng chỉ sử dụng mật khẩu. Trong lần đăng nhập này người dùng gửi yêu cầu bật tính năng xác thực hai lớp. Khi tính năng xác thực hai lớp được bật trên website, người dùng sẽ nhận được một mã QR do máy chủ sinh mã QR sinh ra qua giao diện của website. Người dùng sử dụng ứng dụng quét mã QR để đọc mã này và sinh mã OTP theo RFC- 6235 và sử dụng cho các lần đăng nhập tiếp theo. Từ lần đăng nhập thứ hai người dùng cần sử dụng cả mật khẩu và mã OTP được sinh ra trên ứng dụng Google Autheticator để tiến hành xác thực. Về phía máy chủ website, khi nhận được yêu cầu sử dụng tính năng xác thực từ phía người dùng, gửi yêu cầu này đến máy chủ sinh mã QR. Máy chủ sinh mã QR tiến hành sinh mã QR cho từng người dùng theo RFC-623(xóa phần chữ đỏ này). Mã QR này được gửi tới giao diện website và lưu vào cơ sở dữ liệu. Khi người dùng đăng nhập lại sẽ tiến hành kiểm tra mật khẩu và mã OTP của người dùng (hình 6). Đặng Xuân Bảo và Đtg Tạp chí KHOA HỌC & CÔNG NGHỆ ĐHTN 225(06): 479 - 485 Email: jst@tnu.edu.vn 483 Hình 5. Sơ đồ thuật toán hoạt động người dùng khi đăng nhập Hình 6. Sơ đồ thuật toán hoạt động của máy chủ khi xác thực 4.1. Thiết kế các chức năng của máy chủ sinh mã QR Để tạo mã QR trong nghiên cứu sử dụng framework mã nguồn mở Django (thư viện django otp) [8]. Đoạn code tạo mã QR và gửi trả về cho client như sau: def get(self, request, *args, **kwargs): # Get the data from the session try: key = self.request.session[self.session_key_name] except KeyError: raise Http404() # Get data for qrcode image_factory_string = getattr(settings, 'TWO_FACTOR_QR_FACTORY', self.default_qr_factory) image_factory = import_string(image_factory_string) content_type = self.image_content_types[image_factory.kind ] try: username = self.request.user.get_username() except AttributeError: username = self.request.user.username otpauth_url = get_otpauth_url(accountname=username, issuer=self.get_issuer(),secret=key, digits=totp_digits()) # Make and return QR code img = qrcode.make(otpauth_url, image_factory=image_factory) resp = HttpResponse(content_type=con tent_type) img.save(resp) return resp 4.2. Tính năng tạo mã OTP trên Google Authenticator Người dùng sử dụng ứng dụng Google Authenticator đã được cài trên điện thoại của mình để quét mã QR. Hai tham số shared secret key và thời gian thực được kết nối với Đặng Xuân Bảo và Đtg Tạp chí KHOA HỌC & CÔNG NGHỆ ĐHTN 225(06): 479 - 485 Email: jst@tnu.edu.vn 484 nhau và đưa qua hàm băm SHA-1. Đầu ra sẽ là mã TOTP được chuyển về dạng dễ sử dụng cho người dùng gồm 6 ký tự. Tiến hành nhập mã OTP và gửi lên phía server, nếu mã OTP vừa nhập trùng với mã OTP được sinh trên server thì server sẽ tiến hành lưu trạng thái xác thực hai lớp của tài khoản này đã được bật ở cơ sở dữ liệu. Đoạn code mẫu tạo ra mã OTP trong Google Autheticator: original_secret = xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx secret = BASE32_DECODE(TO_UPPERCASE(REM OVE_SPACES(original_secret))) input = CURRENT_UNIX_TIME() / 30 hmac = SHA1(secret + SHA1(secret + input)) four_bytes = hmac[LAST_BYTE(hmac):LAST_BYTE(hm ac) + 4] large_integer = INT(four_bytes) small_integer = large_integer % 1,000,000. 5. Kết quả thử nghiệm Môi trường yêu cầu để cài đặt và triển khai hệ thống là: Hệ điều hành Linux, đã cài đặt Python 3.6, Django 1.11, cơ sở dữ liệu SQLite. Yêu cầu phần cứng: ổ cứng trống 50Mb, RAM từ 4Gb. Đầu tiên, cần khởi chạy máy chủ sinh mã QR (hình 7). Hình 7. Hệ thống token mềm Tiếp theo, người dùng yêu cầu bật tính năng xác thực hai yếu tố (hình 8). Hình 8. Bật tính năng xác thực hai lớp Sau khi bật tính năng xác thực hai yếu tố, máy chủ sinh mã QR sẽ sinh một mã QR cho người dùng (hình 9). Sau đó người dùng sử dụng Google Authenticator để đọc mã QR và sinh mã OTP. Kết quả sinh mã OTP như trong hình 10. Tiến hành đăng nhập sử dụng mật khẩu (hình 11) và mã OTP (hình 12). Hình 9. Mã QR được sinh ra Hình 10. Mã OTP được tạo ra Đặng Xuân Bảo và Đtg Tạp chí KHOA HỌC & CÔNG NGHỆ ĐHTN 225(06): 479 - 485 Email: jst@tnu.edu.vn 485 Hình 11. Giao diện đăng nhập Hình 12. Sử dụng mã OTP để xác thực 6. Kết luận Nghiên cứu đã trình bày sự cần thiết của vấn đề xác thực đa nhân tố trong đảm bảo an toàn thông tin hiện nay. Trong đó xác thực đa nhân tố sử dụng mã OTP là rất phổ biến hiện nay. Kết quả của nghiên cứu là đã phân tích, thiết kế và xây dựng thành công hệ thống xác thực đa nhân tố sử dụng mã OTP cho một website cụ thể. Hệ thống chạy ổn định, có đáp ứng được nhu cầu bình thường của người dùng. Hệ thống đề xuất có thể tích hợp vào các trang web, các ứng dụng thương mại điện tử như shopee, lazada... để thực hiện chức năng xác thực nguời dùng cũng như xác thực hành động của người dùng (đặt hàng, đăng sản phẩm, hủy đơn hàng...). Hệ thống đề xuất cũng có thể tích hợp vào hệ thống máy chủ của các ngân hàng để xác thực các giao dịch trực tuyến, tuy nhiên cần xây dựng một ứng dụng sinh mã OTP thay thế cho Google Authenticator để đảm bảo các chuẩn an toàn riêng trong lĩnh vực thanh toán điện tử. TÀI LIỆU THAM KHẢO/ REFERENCES [1]. M. S. Merkow, and J. Breithaupt, Information Security Principles and Practices. NJ, Prentice Hall, 2005. [2]. E. Gilman, and D. Barth, Zero Trust Networks: Building Secure Systems in Untrusted Networks, 1st edition, Califonia: O'Reilly Media, 2017. [3]. Le Phuong, “The bank has simultaneously changed the way to receive OTP codes from today”, Jul. 01, 2019. [Online]. Available: https://bnews.vn/ngan-hang-dong-loat-doi- cach-nhan-ma-otp-tu-hom-nay/126768.html. [Accessed Jan. 11, 2020]. [4]. C. J. Wu, and J. D. Irwin, Introduction to Computer Networks and Cybersecurity. Florida: CRC Press, 2017. [5]. Internet Engineering Task Force, “TOTP: Time-Based One-Time Password Algorithm”. Internet Engineering Task Force, RFC6238, 2011. [Online]. Available: https://tools.ietf.org/html/rfc6238. [Accessed Jan. 11, 2020]. [6]. J. R. Vacca, Computer and Information Security Handbook. Massachusetts: Morgan Kaufmann, 2017. [7]. Google, “Google Authenticator OpenSource”, Dec. 06, 2018. [Online]. Available: https://github.com/google/google- authenticator. [Accessed Jan. 11, 2020]. [8]. P. Sagerson, “Django-otp”, Aug. 24, 2019. [Online]. Available: https://django-otp- official.readthedocs.io/en/ stable. [Accessed Jan. 11, 2020].
File đính kèm:
- nghien_cuu_xay_dung_he_thong_xac_thuc_da_nhan_to_cho_website.pdf