Giới thiệu tiêu chuẩn mật khẩu dùng một lần HOTP và TOTP 

Trong xu hướng phát triển của công nghệ, bảo mật trở thành một yếu tố tất yếu trong mọi lĩnh vực ứng dụng công nghệ thông tin. An toàn cho mật khẩu cũng là một vấn đề luôn được quan tâm trong bảo mật bởi sử phát triển công nghệ giúp cho hacker giảm thiểu thời gian giải mã mật khẩu cũng như có những phương thức giải mã, tấn công nhanh hơn. Tuy nhiên vẫn luôn có những phương thức an toàn cho mật khẩu được ưa chuộng và sử dụng rộng dãi, bài viết này sẽ giới thiệu hai phương thức như vậy. Bài viết xin được giới thiệu hai tiêu chuẩn mật khẩu dùng một lần HOTP và TOTP.

Tiêu chuẩn mật khẩu dùng một lần HOTP

Tổng quan về HOTP

Tiêu chuẩn mật khẩu dùng một lần HOTP (HMAC-based one-time password) là một thuật toán sinh mật khẩu dùng một lần (OTP – one-time password) dựa trên mã xác thực tin nhắn theo hàm băm (HMAC). HOTP được tổ chức Internet Engineering Task Force (IETF) - nhóm chuyên trách kỹ thuật Internet công bố tại RFC 4226 tháng 12/2005 (RFC - Request for Comments). Đây là một thuật toán được sử dụng phổ biến bởi rất nhiều công ty, một phần sự phổ biến đến từ việc HOTP là một tiêu chuẩn mở miễn phí.

Thuật toán

Thuật toán HOTP cung cấp một phương pháp xác thực bằng cách tạo đối xứng các mật khẩu hoặc giá trị mà người dùng có thể đọc được (làm một dãy số liên tục từ 6 -8 chữ số), mỗi một lần xác thực thì sẽ chỉ dùng duy nhất một mật khẩu. Mỗi lần tạo mật khẩu thì sẽ sử dụng duy nhất một giá trị bộ đếm, đây cũng là nền tảng xây dựng khái niệm một lần.

Các thành phần của thuật toán HOTP bao gồm:

Một phương pháp băm mật mã, kí hiệu là H (mặc định là SHA-1).

Một khóa bí mật, kí hiệu là K, là một chuỗi byte tùy ý và phải giữ nguyên trạng thái riêng tư, là giá trị bí mật được chia sẻ giữa người dùng và server.

Một bộ đếm, kí hiệu là C, là bộ đếm được đồng bộ giữa người dùng và server, độ dài của C là 8 bytes.

Độ dài giá trị HOTP, kí hiệu là d (thông thường độ dài từ 6–10, mặc định là 6 và 6–8 được khuyến nghị).

Cách sinh mật khẩu OTP trong thuật toán là:

HOTP(K,C) = Truncate(HMAC_SHA-1(K,C))

Truncate( ): Là hàm tách chuỗi, lấy mật khẩu OTP từ việc thực hiện trích xuất kết quả từ hàm Hash.Hàm HMAC_SHA-1(K,C) có kết quả đầu ra cho một giá trị có độ dài là 160 bits = 20 bytes, hàm (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.

Lấy 4 bit thấp của byte cuối cùng từ kết quả đầu ra 160 bit của hàm HMAC_SHA1(K,C) chuyển sang cơ số 10 để tìm vị trí offset, sau đó sẽ đượ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 là:

HOTPvalue = HOTP(K,C) mod 10d

Để thực hiện quá trình sinh mã HOTP luôn cần một kênh liên lạc giữa người dùng và server để đảm bảo việc trao đổi giá trị K. Về phía server, server sẽ dựa vào giá trị K được trao đổi và giá trị bộ đếm C để sinh mật khẩu OTP. Về phía người dùng, người dùng sử dụng thiết bị tin cậy đã được kiểm chứng từ bên server để sinh một mã OTP. Trong quá trình xác thực cho người dùng, hai mã OTP được sinh ra từ phía server và phía người dùng sẽ được server so sánh với nhau, xác thực chỉ được xác nhận thành công nếu hai mãi OTP trùng nhau.

Vấn đề bảo mật

Trên thực tế sử dụng, HOTP vẫn luôn được coi là phương pháp bảo mật cho mật khẩu an toàn được nhiều công ty, tổ chức sử dụng. Tuy nhiên cốt lõi của nó luôn là vấn đề bảo mật nghiên trọng nhất và đó chính là SHA-1. HOTP từ thời điểm triển khai năm 2005 thì có sấp xỉ 5 năm thịnh hành, đến năm 2010, nhiều tổ chức đã khuyến nghị thay thế nó. Nhiều năm sau đó, SHA-1 dần bị trở nên lạc hậu và bị loại bỏ khỏi các giải thuật mật mã do độ dài mã của SHA-1 chỉ 160 bit dễ dàng bị giải mã bởi nhiều sự tiến bộ công nghệ, tốc độ giải mã nhanh hơn.

Từ năm 2020, SHA-1 luôn bị đe dọa bởi các Tấn công va chạm (Collision attack), đây là lí do Ars Technica, nhà phát triển sử dụng thư viện OpenSSH và Libssh khai tử không hỗ trợ hay sử dụng SHA-1 nữa. Trên thực tế từ năm 2020, SHA-1 gần như bị khai tử mở ra kỉ nguyên mới với SHA-2 và SHA-3.

Tiêu chuẩn mật khẩu dùng một lần TOTP

Tổng quan về TOTP

Mật khẩu dùng một lần dựa trên thời gian (TOTP) là một thuật toán máy tính tạo mật khẩu dùng một lần (OTP) sử dụng thời gian hiện tại làm nguồn duy nhất. Là một phần mở rộng của thuật toán Mật khẩu dùng một lần (HOTP). TOTP là nền tảng của Sáng kiến Xác thực Mở (OATH) và được sử dụng trong một số hệ thống xác thực hai yếu tố (2FA). Thông qua sự hợp tác của một số thành viên OATH, dự thảo TOTP đã được phát triển để tạo ra một tiêu chuẩn được ngành hỗ trợ. TOTP bổ sung cho HOTP tiêu chuẩn một lần dựa trên sự kiện và nó cung cấp cho các tổ chức và doanh nghiệp người dùng cuối nhiều sự lựa chọn hơn trong việc lựa chọn công nghệ phù hợp nhất với các yêu cầu ứng dụng và nguyên tắc bảo mật của họ. Năm 2008, OATH đã đệ trình phiên bản dự thảo của đặc điểm kỹ thuật cho IETF. Phiên bản này kết hợp tất cả các góp ý và đánh giá mà các tác giả nhận được từ cộng đồng kỹ thuật dựa trên các phiên bản trước được gửi cho Lực lượng Đặc nhiệm Kỹ thuật Internet (IETF). Vào tháng 5 năm 2011, TOTP chính thức trở thành tiêu chuẩn RFC 6238.

Phương thức xác thực TOTP

Để thực hiện xác thực TOTP, sau đấy là một quy trình ví dụ cụ thể để người dùng có thể xác thực và sử dụng một dịch vụ nào đó (theo thứ tự tăng dần):

Hình 1: Minh họa giao thức TOTP

1. Đối với người dùng lần đầu, người dùng đăng ký 2FA với nhà cung cấp dịch vụ của ứng dụng.

2. Nhà cung cấp một mã QR cho người dùng trên trình duyệt cá nhân.

3. Người dùng quét mã QR để được liên kết và tải về ứng dụng xác thực từ AppStore hoặc GoogleStore.

4. Người dùng sử dụng ứng dụng xác thực trên thiết bị cá nhân đáng tin cậy quét mã QR.

5. Sau khi quét mã QR người dùng được cấp mã OTP trên thiết bị đáng tin cậy và điền nó để truy cập ứng dụng.

Thuật toán

Trên thực tế, TOTP là thuật toán dựa trên HOTP tức là tạo đối xứng các mật khẩu hoặc giá trị mà người dùng có thể đọc được (làm một dãy số liên tục từ 6 -8 chữ số), mỗi một lần xác thực thì sẽ chỉ dùng duy nhất một mật khẩu. Mỗi lần tạo mật khẩu thì sẽ sử dụng duy nhất một giá trị bộ đếm, tuy nhiên TOTP thay thế bộ đếm bằng một giá trị thời gian thực.

Xác thực và kích thước bước thời gian

OTP được tạo trong cùng một bước thời gian sẽ giống nhau. Khi một OTP được nhận tại một hệ thống xác thực, nó không biết dấu thời gian chính xác của người dùng khi một OTP được tạo. Hệ thống xác thực thường có thể sử dụng dấu thời gian khi nhận được OTP để so sánh OTP. Do độ trễ của mạng, khoảng cách (được đo bằng T, tức là số bước thời gian kể từ T0 ) giữa thời điểm OTP được tạo và thời gian OTP đến hệ thống nhận có thể lớn. Thời gian nhận tại hệ thống xác thực và quá trình tạo OTP thực tế có thể không nằm trong cùng một hiển thị bước thời gian tạo ra cùng một OTP. Khi OTP được tạo ở hiển thị cuối bước thời gian, thời gian nhận rất có thể rơi vào hiển thị bước thời gian tiếp theo. Hệ thống xác thực thường phải đặt chính sách cho cửa sổ trì hoãn truyền OTP có thể chấp nhận được để xác thực. Hệ thống xác thực phải so sánh các OTP không chỉ với dấu thời gian nhận mà còn với dấu thời gian trong quá khứ nằm trong độ trễ truyền. Do một số hiển thị được chấp nhận thời gian trì hoãn lớn hơn thời gian sẽ hiển thị cho một vụ tấn công của hacker nên nhà phát triển khuyến nghị rằng chỉ cho phép tối đa một bước thời gian vì độ trễ của mạng.

Kích thước bước thời gian có ảnh hưởng đến cả bảo mật và khả năng sử dụng. Kích thước bước thời gian lớn hơn có nghĩa là cửa sổ hiệu lực lớn hơn để OTP được chấp nhận bởi hệ thống xác thực. Có những tác động khi sử dụng kích thước bước thời gian lớn hơn, như sau:

Thứ nhất, kích thước bước thời gian hiển thị càng lớn thì nguy cơ tấn công càng cao. Khi OTP được tạo và hiển thị với bên thứ ba trước khi nó được sử dụng, bên thứ ba có thể sử dụng OTP trong hiển thị cùng bước thời gian, vì vậy bên phát triển đề xuất kích thước bước thời gian mặc định là 30 giây này nhằm để cân bằng giữa bảo mật và khả năng sử dụng.

Thứ hai, OTP khác tiếp theo phải được tạo trong hiển thị ở bước thời gian tiếp theo. Người dùng phải đợi cho đến khi đồng hồ chuyển sang hiển thị bước thời gian tiếp theo từ lần gửi cuối cùng. Thời gian chờ có thể không chính xác bằng độ dài chuyển tiếp của hiển thị tiếp theo, tùy thuộc vào thời điểm tạo OTP cuối cùng. Ví dụ: nếu OTP cuối cùng được tạo ở thời điểm nửa chừng trong hiển thị bước thời gian, thì thời gian chờ cho OTP tiếp theo bằng một nửa thời gian của bước thời gian. Nói chung, hiển thị với bước thời gian lớn hơn có nghĩa là thời gian chờ lâu hơn để người dùng nhận được OTP hợp lệ tiếp theo sau lần xác thực OTP thành công cuối cùng. Một hiển thị với thời gian chờ quá lớn (ví dụ: 10 phút) có lẽ sẽ không phù hợp với các trường hợp sử dụng đăng nhập Internet điển hình; người dùng có thể không nhận được mã OTP tiếp theo trong vòng 10 phút và do đó sẽ phải đăng nhập lại vào cùng một trang web sau 10 phút.

Vấn đề bảo mật

Cũng giống với HOTP, TOTP cũng sử dụng SHA-1 và trở nên lỗi thời từ năm 2020. Tuy nhiên do không sử dụng bộ đếm C (có thể tính toán được) mà thay thế bằng thời gian thực và được tính toán cụ thể nên TOTP vẫn đủ an toàn với thời gian thực vừa đủ để chống lại cuộc tấn công từ bên thứ 3.

 Vấn đề thời gian cũng là hạn chế bảo mật của TOTP, việc hiển thị OTP quá lâu sẽ gây ra sự mất an toàn cho cả người dùng và server. Ngược lại thì thời gian hiển thị quá ngắn khiến cho TOTP cũng gây ra sự bất tiện cho người dùng.

Tuy nhiên khi được xếp vào nhóm các giải pháp bảo mật hai yếu tố (2FA) thì việc xác thực TOTP vẫn được ưa chuộng bởi tính hiệu quả về thời gian thực và an toàn với thời gian sinh OTP.

Kết luận

Trong bài viết này, hai tiêu chuẩn mật khẩu dùng một lần HOTP và TOTP được giới thiệu một cách khái quát đến cụ thể thuật toán sinh mật khẩu để người đọc có hình dung về phương thức tạo và xác thực với mật khảu dùng một lần. Trong thực tế phát triển của thế giới hiện nay thì cả hai tiêu chuẩn đều đã có những dấu ấn trong phát triển bảo mật và an toàn mật khẩu cho người dùng trong nhiều lĩnh vực, điển hình nhất là thanh toán trực tuyến, xác thực người dùng, mặc dù HOTP có phần lỗi thời nhưng với những sự chỉnh sửa kết hợp công nghệ mới hiện nay thì TOTP vẫn được ứng dụng trong bảo đảm an toàn mật khẩu OTP.

Thông qua việc giới thiệu hai tiêu chuẩn này, bài đọc đưa ra các cơ sở tri thức để áp dụng phát triển bảo mật và an toàn thông tin trong mật khẩu nhằm xác thực tài khoản, xác thực người dùng. Đồng thời, trong bối cảnh phát triển theo xu hướng công nghệ cao phục vụ người dân, cơ quan nhà nước và đặc biệt là phát triển chính phủ điện tử, thì việc ứng dụng các công nghệ an toàn bảo mật đặc biệt với mật khẩu OTP là vô cùng cần thiết, đây là yếu tố cơ bản cho thanh toán hay xác thực trực tuyến tại Việt Nam hiện nay.

Vũ Cao Minh Đức

Tài liệu tham khảo

  1. RFC 4226: “HOTP: An HMAC-Based One-Time Password Algorithm”, IETF, D. M'Raihi (VeriSign), M. Bellare (UCSD), F. Hoornaert (Vasco), D. Naccache (Gemplus), O. Ranen (Aladdin), December 2005.
  2. RFC 6238: “TOTP: Time-Based One-Time Password Algorithm”, IETF, ISSN: 2070 – 1721, D. M'Raihi (Verisign, Inc.), S. Machani (Diversinet Corp.), M. Pei (Symantec), J. Rydell (Portwise, Inc.), May 2021.
1390 Go top

Sự kiện nổi bật

Ý kiến về Trang thông tin điện tử Cục Tin học hóa?
1. Đạt yêu cầu, 1180 phiếu (88 %)
2. Chưa đạt yêu cầu, 107 phiếu (8 %)
3. Cần thêm chủ đề, 57 phiếu (4 %)
Tổng số phiếu: 1344
THÔNG KÊ TRUY CẬP
  • Người trực tuyến Người trực tuyến
    • Khách Khách 41
    • Thành viên Thành viên 0
    • Tổng Tổng 41
    • Tổng lượt truy cập: Tổng lượt truy cập: 18945550