GIỚI THIỆU TỔNG QUAN VỀ HỆ THỐNG ỨNG DỤNG PHẦN MỀM CUNG CẤP DỊCH VỤ TRUNG GIAN THANH TOÁN VÀ MOBILE
Giới thiệu về đơn vị thực tập
Công ty Cổ phần Giải pháp Phần mềm Tài chính (FSS) được thành lập vào ngày 18/03/2008, chuyên phát triển và triển khai giải pháp công nghệ thông tin cho các doanh nghiệp trong lĩnh vực tài chính, ngân hàng và chứng khoán cả trong nước và quốc tế Trụ sở chính của công ty đặt tại 315 Trường Chinh, Quận Thanh Xuân, Hà Nội, cùng với một chi nhánh tại Quận Phú Nhuận, Thành phố Hồ Chí Minh.
Sau 14 năm phát triển, FSS đã trở thành một trong những công ty hàng đầu trong lĩnh vực phần mềm tài chính - ngân hàng với hơn 300 nhân viên và được nhiều khách hàng lớn như TPBank, VPBank, VNDirect tin tưởng FSS cam kết không ngừng nỗ lực để cung cấp sản phẩm và dịch vụ chất lượng, đồng thời tạo ra giá trị thiết thực cho khách hàng, cổ đông, nhân viên và cộng đồng.
Hình 1.1 Cơ cấu tổ chức
Hiện tại, FSS hoạt động trong ba lĩnh vực chính:
Cung cấp và triển khai hệ thống core giao dịch chứng khoán là dịch vụ thiết yếu cho mọi đối tượng khách hàng Hệ thống core chứng khoán được áp dụng cho các công ty chứng khoán, bao gồm Công ty Cổ phần Chứng khoán ASC, nhằm tối ưu hóa quy trình giao dịch và nâng cao trải nghiệm khách hàng.
Cổ phần Chứng khoán KS,…
The implementation of Data Warehouse and Business Intelligence systems has been successfully executed for several banks, including Saigon-Hanoi Commercial Joint Stock Bank, Shinhan Bank, and Asia Commercial Bank.
Chúng tôi cung cấp dịch vụ tư vấn, phát triển và triển khai phần mềm theo yêu cầu cho các cơ quan nhà nước như Tổng cục Thuế, Bộ Công an, Bộ Tài chính và nhiều đơn vị khác.
Trung tâm Chính phủ đang triển khai dự án "Trang bị hệ thống ứng dụng phần mềm cung cấp dịch vụ Trung gian thanh toán và Mobile Money" Dự án này là sự hợp tác giữa Trung tâm dịch vụ số MobiFone (TT.MDS) và liên danh FSS – TELSOFT.
Cổ phần Giải pháp Phần mềm Tài chính và Công ty Cổ phần TELSOFT đã phát triển một ứng dụng thanh toán điện tử tiện lợi, dễ sử dụng Ứng dụng này cho phép người dùng mở nhiều loại tài khoản thanh toán như ví điện tử, tiền di động và tài khoản viễn thông chỉ với một tài khoản đăng nhập duy nhất trên thiết bị di động MobiFone cung cấp dịch vụ Trung gian thanh toán và Mobile Money trong cùng một ứng dụng, đáp ứng nhu cầu của đại đa số người dân, bao gồm cả những người không có tài khoản ngân hàng và cư trú ở vùng sâu, vùng xa.
Giới thiệu hệ thống ứng dụng phần mềm cung cấp dịch vụ Trung gian thanh toán và Mobile Money
1.2.1 Giới thiệu dịch vụ trung gian thanh toán và dịch vụ Mobile Money
1.2.1.1 Dịch vụ trung gian thanh toán
Trong thời đại công nghệ hiện nay, "dịch vụ trung gian thanh toán" đã trở nên phổ biến, giúp người dùng thực hiện thanh toán trực tuyến cho mua sắm và hóa đơn Bản chất của dịch vụ này là kết nối, truyền dẫn và xử lý dữ liệu điện tử cho các giao dịch thanh toán giữa tổ chức cung cấp dịch vụ và người sử dụng.
Theo Điều 15, Nghị định 101/2012/NĐ-CP, dịch vụ trung gian thanh toán bao gồm hạ tầng thanh toán điện tử và các dịch vụ hỗ trợ thanh toán Nghị định 80/2016/NĐ quy định các tổ chức được cung ứng dịch vụ này bao gồm ngân hàng thương mại, chi nhánh ngân hàng nước ngoài và các tổ chức không phải ngân hàng được Ngân hàng Nhà nước cấp phép Trong danh sách các tổ chức không phải ngân hàng được cấp phép, nhiều cái tên quen thuộc như NAPAS, VNPAY, AIRPAY (nay là SHOPEEPAY), VINID PAY, VIETTEL, và MOBIFONE đã được ghi nhận.
Lĩnh vực trung gian thanh toán tại Việt Nam hiện đang được đánh giá cao về tiềm năng phát triển và thu hút đầu tư nước ngoài Tại “Hội nghị sơ kết hoạt động nhóm hội viên tổ chức trung gian thanh toán và fintech” diễn ra vào ngày 10/11/2021, có 43 tổ chức không phải ngân hàng được Ngân hàng Nhà nước cấp phép hoạt động Trong bối cảnh dịch Covid-19, khi Chính phủ áp dụng giãn cách xã hội, dịch vụ trung gian thanh toán đã thể hiện rõ tiềm năng của mình khi người dân chuyển sang thanh toán qua Internet do hạn chế di chuyển Sự phát triển nhanh chóng của các sàn thương mại điện tử cùng với các chính sách ưu đãi cho người dùng đã thúc đẩy dịch vụ này Thanh toán trực tuyến giờ đây trở nên phổ biến nhờ vào sự thuận tiện và nhanh chóng mà nó mang lại.
Dịch vụ trung gian thanh toán hiện đang đối mặt với nhiều thách thức về pháp lý và xác thực danh tính khách hàng Khách hàng, đặc biệt là ở vùng sâu, vùng xa và nông thôn, gặp khó khăn trong việc sử dụng dịch vụ này do yêu cầu phải có tài khoản ngân hàng và liên kết với ví điện tử Hơn nữa, cơ chế hợp tác và chia sẻ dữ liệu giữa các ngân hàng và doanh nghiệp vẫn còn hạn chế.
Mobile Money là hình thức thanh toán không dùng tiền mặt qua tài khoản viễn thông cho hàng hóa và dịch vụ giá trị nhỏ, hiện đang được Chính phủ thí điểm đến ngày 18/11/2023 Dịch vụ này do các doanh nghiệp có Giấy phép cung ứng dịch vụ trung gian thanh toán và Giấy phép thiết lập mạng viễn thông công cộng di động thực hiện Mobile Money đóng vai trò quan trọng trong việc cung cấp nguồn tài chính không tiếp xúc, đáp ứng nhu cầu hàng ngày Ngày 18/11/2021, MobiFone trở thành doanh nghiệp đầu tiên được Ngân hàng Nhà nước Việt Nam phê duyệt triển khai dịch vụ này qua Quyết định số 1818/QĐ-NHNN.
Dịch vụ Mobile Money hiện đang trong giai đoạn thí điểm, với nhiều giới hạn về khuôn khổ pháp luật và phạm vi thực hiện Theo Quyết định số 316/QĐ-TTg ngày 09/03/2021, khách hàng muốn sử dụng dịch vụ này cần cung cấp CMND/CCCD hoặc Hộ chiếu phù hợp với thông tin đăng ký số thuê bao di động Doanh nghiệp thí điểm sẽ thực hiện việc định danh và xác thực theo quy định của Chính phủ, và số thuê bao di động phải được kích hoạt và sử dụng liên tục ít nhất 3 tháng Mỗi khách hàng chỉ được mở một tài khoản Mobile Money tại mỗi doanh nghiệp thí điểm, hiện đang cung cấp dịch vụ cho các nghiệp vụ thanh toán hàng hóa và dịch vụ có giá trị nhỏ.
Khách hàng có thể nạp tiền mặt vào tài khoản Mobile Money tại các điểm kinh doanh hoặc nạp tiền từ tài khoản thanh toán ngân hàng và Ví điện tử của mình tại các doanh nghiệp thí điểm dịch vụ Mobile Money.
Rút tiền mặt từ tài khoản Mobile Money có thể thực hiện tại các điểm kinh doanh, hoặc chuyển tiền từ tài khoản Mobile Money về tài khoản thanh toán ngân hàng của khách hàng Ngoài ra, khách hàng cũng có thể rút tiền về Ví điện tử tại các doanh nghiệp tham gia thí điểm dịch vụ Mobile Money.
- Thanh toán việc mua hàng hóa, dịch vụ cho Đơn vị chấp nhận thanh toán bằng tài khoản Mobile Money
Doanh nghiệp thực hiện thí điểm chuyển tiền giữa các tài khoản Mobile Money của khách hàng trong cùng hệ thống, bao gồm việc chuyển tiền từ tài khoản Mobile Money sang tài khoản thanh toán tại ngân hàng và giữa tài khoản Mobile Money với Ví điện tử do doanh nghiệp cung cấp.
Hạn mức giao dịch không quá 10 triệu đồng/tháng/tài khoản Mobile Money cho tổng các giao dịch: rút tiền, chuyển tiền và thanh toán” [5]
Theo Báo cáo Việt Nam Digital 2021, Việt Nam có hơn 154 triệu thuê bao viễn thông, tương đương với độ phủ sóng gần 100% trong bối cảnh dân số trên 98 triệu người Điều này tạo điều kiện thuận lợi cho sự phát triển của dịch vụ Mobile Money Hệ thống hạ tầng viễn thông hiện tại đáp ứng các yêu cầu kỹ thuật cần thiết, giúp Mobile Money có cơ hội mở rộng Đặc biệt, dịch vụ này không yêu cầu tài khoản ngân hàng, phù hợp với mọi đối tượng, bao gồm cả người dân ở vùng sâu, vùng xa và nông thôn.
Để dịch vụ Mobile Money phát triển tại Việt Nam, cần thay đổi thói quen sử dụng tiền mặt của người dân, đặc biệt là trong các giao dịch dưới 100.000 đồng Việc tuyên truyền để người dân nhận thức rõ lợi ích của thanh toán không dùng tiền mặt là rất quan trọng Bên cạnh đó, cần hoàn thiện cơ chế pháp lý cho dịch vụ này nhằm hạn chế rủi ro và cải thiện quy trình giao dịch, thanh toán.
1.2.2 Hệ thống ứng dụng phần mềm cung cấp dịch vụ Trung gian thanh toán và Mobile Money
Hệ thống ứng dụng phần mềm Trung gian thanh toán và Mobile Money của MobiFone được thiết kế nhằm cung cấp các sản phẩm dịch vụ thanh toán tiện lợi cho khách hàng.
Dịch vụ ví điện tử cung cấp nhiều tính năng tiện ích như nạp và rút tiền từ tài khoản ngân hàng, chuyển tiền giữa các tài khoản ví điện tử, cũng như chuyển tiền đến các tài khoản Mobile Money Ngoài ra, dịch vụ này còn hỗ trợ thanh toán hóa đơn và thanh toán đơn hàng cho cả khách hàng cá nhân và doanh nghiệp.
Dịch vụ Mobile Money cho phép người dùng thực hiện chuyển tiền giữa các tài khoản Mobile Money, chuyển tiền đến ví điện tử, thanh toán hóa đơn và mua sắm, cũng như nạp/rút tiền mặt một cách thuận tiện cho khách hàng cá nhân.
Dịch vụ hỗ trợ thu hộ chi hộ cung cấp các tính năng thanh toán lương cho nhân viên, chi trả lương hưu, bảo hiểm xã hội, cũng như các khoản vay Ngoài ra, dịch vụ còn hỗ trợ thanh toán hóa đơn và mua sắm tại các quầy giao dịch, phục vụ cho khách hàng doanh nghiệp và các đơn vị chấp nhận thanh toán.
- Dịch vụ cổng thanh toán: cung cấp tính năng thanh toán, mua hàng trực tuyến trên nền tảng TMĐT dành cho các đơn vị chấp nhận thanh toán
Hình 1.2 Mô hình nghiệp vụ của hệ thống
Hệ thống được chia làm 3 khối: Channel Layer, Transaction Layer, Financial Layer
CƠ SỞ LÝ THUYẾT CỦA MẬT KHẨU MỘT LẦN OTP
Khái quát về OTP
2.1.1 Lịch sử ra đời của mã OTP
OTP, hay One Time Password, là mật khẩu sử dụng một lần được phát triển bởi Leslie Lamport vào đầu những năm 1980 Nó hoạt động như một lớp xác thực bổ sung, tăng cường bảo mật cho các ứng dụng đã xác thực Nếu mật khẩu bị xâm phạm, mã OTP vẫn cần phải bị phá để có quyền truy cập vào tài khoản, tạo ra xác thực hai yếu tố mạnh mẽ và ngày càng phổ biến Mã OTP có thời gian hiệu lực ngắn, và sau khi hết thời gian, nó sẽ không còn sử dụng được Một trong những ưu điểm lớn nhất của OTP là khả năng chống tấn công, vì mã đã sử dụng sẽ không thể tái sử dụng Hơn nữa, khi người dùng sử dụng cùng một mật khẩu trên nhiều hệ thống, việc có mã OTP giúp giảm thiểu rủi ro nếu một mật khẩu bị lộ.
Các thuật toán tạo OTP thường áp dụng tính ngẫu nhiên hoặc ngẫu nhiên giả để tạo ra khóa chia sẻ, đồng thời sử dụng các hàm băm mật mã nhằm tạo ra các giá trị khó có thể đảo ngược.
HOTP là một thuật toán mật khẩu sử dụng một lần, dựa trên mã xác thực thông điệp HMAC Thuật toán này sử dụng giá trị bộ đếm tăng dần cùng với khóa đối xứng tĩnh, được biết đến qua mã thông báo và xác thực dịch vụ Để tạo ra giá trị cho HOTP, thuật toán HMAC sẽ được áp dụng.
Giá trị HOTP là một giá trị cắt ngắn của bộ đếm C dựa trên giá trị băm HMAC:
Truncate: đại diện cho hàm biến đổi giá trị của HMAC thành giá trị HOTP là một mã nhị phân động 4 byte,
Các giá trị K (Khóa), C (Bộ đếm) và dữ liệu được băm từ byte đầu tiên
Cụ thể, quy trình tạo ra giá trị HOTP gồm có 3 bước:
- Bước 1: Tạo giá trị HMAC theo công thức:
HS=HMAC (K,C), trong đó HS là một chuỗi có 64 byte
- Bước 2: Tạo một chuỗi 4 byte:
Trong đó: DT(String), String=String[0]…String[63] Đặt OffsetBits là 4 bit bậc thấp của String[63]
DT trả về 31 bit cuối cùng của P
- Bước 3: Tính giá trị HOTP:
Snum=StToNum(Sbits), hàm này dùng để chuyển đổi S thành một số trong 0…2 31 -1
Digit là số chữ số giá trị HOTP được tính từ giá trị HMAC,
D là một số trong phạm vi 0…10 digit -1
TOTP (Mật khẩu sử dụng một lần dựa trên thời gian) là một phương pháp xác thực an toàn, sử dụng khóa tĩnh và giá trị thời gian hiện tại thay vì bộ đếm Mỗi mật khẩu TOTP chỉ hợp lệ trong một khoảng thời gian nhất định, thường là 30 hoặc 60 giây Nếu người dùng không sử dụng mật khẩu trong khoảng thời gian này, mật khẩu sẽ bị vô hiệu và cần yêu cầu một mật khẩu mới Để thiết lập xác thực TOTP, người xác thực và trình xác thực cần cấu hình các tham số HOTP và TOTP trước đó.
- T0: Thời gian mà từ đó bắt đầu đếm các bước thời gian, mặc định là 0
- TX: khoảng thời gian được sử dụng để tính toán giá trị của bộ đếm CT
Cả trình xác thực và người xác thực đều tính toán giá trị TOTP, sau đó trình xác thực kiểm tra tính khớp giữa giá trị TOTP do người xác thực cung cấp và giá trị TOTP do trình xác thực tạo ra Một số trình xác thực cho phép điều chỉnh giá trị TOTP để tính toán độ trễ mạng, lệch đồng hồ và sự chậm trễ từ phía người dùng.
Giá trị TOTP(K)=Giá trị HOTP(K,T)
Trong đó: T là một số nguyên và đại diện cho số bước thời gian giữa thời gian ban đầu T0 và thời gian unix hiện tại
Cụ thể hơn, T=(Thời gian unix hiện tại – T0)/TX
Thuật toán này cần hỗ trợ giá trị thời gian T lớn hơn 32 bit để xử lý thời gian sau năm 2038 Các tham số hệ thống TX và T0 phải được thiết lập trước trong quy trình cung cấp và cần được trao đổi giữa bên đăng ký và bên xác thực.
Mã OTP được tạo ra trong cùng một khoảng thời gian sẽ giống nhau, nhưng hệ thống xác thực không biết chính xác thời điểm tạo mã Khi nhận mã OTP, hệ thống thường sử dụng dấu thời gian để so sánh, tuy nhiên, do độ trễ mạng, khoảng cách giữa thời gian tạo mã và thời gian nhận có thể lớn Điều này có nghĩa là mã OTP có thể được tạo ra vào cuối một bước thời gian, trong khi hệ thống nhận mã lại rơi vào bước thời gian tiếp theo Do đó, hệ thống xác thực cần thiết lập quy tắc về độ trễ truyền OTP chấp nhận được và so sánh mã OTP không chỉ với dấu thời gian nhận mà còn với các dấu thời gian trong quá khứ nằm trong khoảng độ trễ đó.
COTP (Challenge-Response One-time Password) là một loại mật khẩu sử dụng một lần dựa trên giao thức thử thách và phản hồi, cho phép người truy cập và hệ thống xác thực lẫn nhau mà không cần tiết lộ giá trị mật mã bí mật Để ngăn chặn sự trùng lặp, giao thức này yêu cầu một bộ đếm bổ sung, đảm bảo rằng ngay cả khi nhận cùng một thử thách hai lần, các mật khẩu một lần vẫn sẽ khác nhau.
Trong lĩnh vực tài chính – ngân hàng, OTP thường được sử dụng trong một số giao dịch phổ biến như:
- Gửi tiết kiệm điện tử
- Thanh toán hóa đơn, mua sắm hàng hóa dịch vụ
- Nạp, rút tiền vào ví điện tử,…
Hình 2.1 Ứng dụng OTP trong lĩnh vực tài chính – ngân hàng
Bên cạnh ứng dụng trong lĩnh vực tài chính – ngân hàng, OTP còn một số ứng dụng khác như:
- Xác thực người dùng khi đăng nhập vào một thiết bị lạ,
2.1.4 Các hình thức sử dụng OTP và mức độ an toàn
2.1.4.1 Thiết bị chuyên dụng OTP-USB
OTP-USB là thiết bị nhỏ gọn giống như USB, dùng để tạo mã OTP một lần cho mỗi giao dịch, không theo quy luật nào Thiết bị này rất quan trọng trong ngân hàng, được gắn với tài khoản ngân hàng của người dùng, người dùng thiết lập mã PIN cho nó Khi thực hiện giao dịch trực tuyến như chuyển tiền, nạp tiền hay rút tiền, hệ thống yêu cầu nhập mã OTP Thiết bị sẽ tạo mã OTP ngẫu nhiên, người dùng chỉ cần lấy mã từ thiết bị và nhập vào hệ thống để hoàn tất giao dịch.
Với thiết kế nhỏ gọn, thiết bị này dễ dàng mang theo bên mình và sử dụng mọi lúc mọi nơi Nó tạo ra mã OTP với thời gian hiệu lực nhất định, đảm bảo tính bảo mật cao Ngay cả khi mã OTP bị lộ, nó sẽ tự động bị vô hiệu hóa cho các giao dịch tiếp theo, giúp bảo vệ thông tin người dùng một cách hiệu quả.
Chi phí mua thiết bị này dao động từ 200.000 đến 400.000 đồng, và việc sử dụng thiết bị này là cần thiết cho mọi giao dịch, điều này có thể gây bất tiện trong một số tình huống.
Xác thực SMS, hay còn gọi là xác thực hai yếu tố qua SMS và OTP, giúp người dùng xác minh danh tính bằng cách nhận mã OTP qua tin nhắn văn bản Sau khi xác nhận giao dịch, người dùng sẽ nhận được tin nhắn chứa mã OTP và chỉ cần nhập mã này vào ứng dụng hoặc trang web để hoàn tất giao dịch.
Xác thực SMS là một phương pháp an toàn hơn so với việc sử dụng mật khẩu do người dùng tự tạo, vì nó giảm thiểu rủi ro từ việc người dùng thường xuyên sử dụng cùng một mật khẩu cho nhiều tài khoản khác nhau Phương pháp này giúp người dùng tránh khỏi việc quên mật khẩu hoặc lưu trữ không an toàn, đồng thời làm cho việc đánh cắp thông tin đăng nhập trở nên khó khăn hơn cho những kẻ xấu Nhờ vào xác thực qua SMS, người dùng có thể loại bỏ nỗi lo về việc ghi nhớ nhiều mật khẩu cho các tài khoản khác nhau.
Xác thực SMS có nhiều nhược điểm, đặc biệt là nguy cơ đánh tráo SIM, khi kẻ xấu có thể liên hệ với công ty viễn thông để yêu cầu chuyển số điện thoại, từ đó truy cập vào mã xác thực gửi đến số đó Việc hack SIM cũng gây ra rủi ro bảo mật, khi kẻ gian giả mạo tín hiệu từ tháp di động và hệ thống SS7 để xem thông tin trong tin nhắn riêng tư Nếu người dùng mất điện thoại mà thiết bị đó đã đăng nhập vào tài khoản mạng xã hội và ứng dụng ngân hàng, xác thực qua SMS trở nên rất rủi ro Hiện nay, lừa đảo qua tin nhắn SMS ngày càng phổ biến, với kẻ xấu giả danh tổ chức uy tín như ngân hàng để thu thập thông tin cá nhân Một chiêu thức tinh vi hơn là giả danh nhân viên chăm sóc khách hàng, yêu cầu người dùng nhập cú pháp **21*Số điện thoại kẻ lừa đảo#OK, dẫn đến việc chuyển cuộc gọi sang số khác Sau khi thực hiện thành công, kẻ lừa đảo có thể lấy mã OTP để truy cập tài khoản ngân hàng Cuối cùng, chi phí xác thực SMS cũng là một nhược điểm, vì mỗi nhà mạng có mức giá khác nhau tùy thuộc vào số lượng tin nhắn.
Phương thức xác thực Email OTP giúp bảo vệ người dùng bằng cách gửi mã OTP đến địa chỉ email đã đăng ký Khi người dùng đăng nhập hoặc thực hiện dịch vụ, máy chủ sẽ gửi mã OTP và yêu cầu người dùng nhập đúng mã để xác nhận danh tính.
Cơ sở mật mã học của mật khẩu sử dụng một lần OTP
Mật khẩu sử dụng một lần (OTP) được tạo ra dựa trên mã xác thực thông điệp HMAC với hàm băm SHA-512, kết hợp với các cơ sở mật mã học khác để đảm bảo tính toàn vẹn của dữ liệu trong quá trình truyền tải giữa thiết bị và nhà cung cấp dịch vụ Phần này sẽ trình bày các khái niệm quan trọng như mã xác thực thông điệp HMAC, chữ ký số RSA, giao thức chia sẻ khóa Diffie-Hellman, và giao thức SSL/TLS.
2.2.1 Mã xác thực thông điệp HMAC dựa trên hàm băm
Mã xác thực thông điệp HMAC, dựa trên hàm băm, được sử dụng để tạo ra mã OTP một cách nhanh chóng và an toàn, đồng thời giảm thiểu khả năng trùng lặp.
Hàm băm (Hash Function) là thuật toán không dùng khóa để mã hóa, có nhiệm vụ tạo ra các giá trị có độ dài cố định từ khối dữ liệu đầu vào Hàm băm chuyển đổi dữ liệu lớn thành giá trị nhỏ hơn, với đặc điểm là hàm một chiều, nghĩa là giá trị đầu ra là duy nhất và khó có thể suy ngược lại nội dung hay độ dài ban đầu Để hoạt động hiệu quả, kích thước khối dữ liệu đầu vào cần đạt 1024 bit, trong khi giá trị đầu ra của hàm băm chỉ là 512 bit.
Một hàm băm được coi là tốt khi thỏa mãn các điều kiện sau:
- Ít xảy ra trùng lặp, khả năng tạo ra các giá trị băm giống nhau cho các dữ liệu đầu vào khác nhau là rất thấp
- Không thể đảo ngược lại giá trị băm, đảm bảo rằng không cách nào để tìm ra dữ liệu đầu vào dựa trên giá trị băm
Các hàm băm mật mã phải đảm bảo chịu được các loại tấn công mã hóa đã biết Hàm băm có các tính chất sau:
Hàm băm h được định nghĩa là không va chạm yếu nếu với một thông điệp x cho trước, rất khó để tìm một thông điệp x’ khác với x sao cho h(x) = h(x’).
Hàm băm h được xem là không va chạm mạnh khi rất khó để tìm ra hai thông điệp khác nhau x và x’ mà có cùng giá trị băm, tức là h(x) = h(x’).
Hàm băm h được coi là hàm một chiều khi rất khó để xác định thông điệp ban đầu x từ một bản tóm lược thông điệp z, tức là h(x) = z.
Các tính chất trên đảm bảo rằng dữ liệu đầu vào dù có bị thay đổi cũng không thể thay đổi giá trị băm
Hàm băm an toàn SHA được công bố vào năm 1992 và chính thức trở thành tiêu chuẩn vào năm 1993 bởi Viện Tiêu chuẩn và Công nghệ Quốc gia (NIST) Hiện nay, SHA-256 là chuẩn hàm băm phổ biến với độ dài 256 bit và tính chất mã hóa một chiều, giúp bảo vệ thông điệp gốc khỏi việc bị truy ngược Mặc dù SHA-256 được đánh giá cao về độ an toàn, nhưng trong tương lai, sự phát triển nhanh chóng của công nghệ và kỹ thuật có thể làm giảm tính bảo mật của nó Do đó, việc nâng cao độ an toàn cho thuật toán mã OTP bằng cách chuyển sang chuẩn an toàn hơn như SHA-512 là rất cần thiết.
SHA-512, hay Thuật toán hàm băm an toàn 512, là một trong những chuẩn hàm băm an toàn nhất hiện nay thuộc họ SHA-2 Thuật toán này được sử dụng để so sánh giá trị băm giữa người gửi và người nhận, đảm bảo tính toàn vẹn của dữ liệu SHA-512 chuyển đổi văn bản có độ dài bất kỳ thành một chuỗi có kích thước cố định, với đầu ra dài 512 bit (64 byte).
Thuật toán này thường được sử dụng để băm địa chỉ email, băm mật khẩu, xác minh bản ghi kỹ thuật số
SHA-512 là một thuật toán hàm băm có khả năng nhận đầu vào lên đến 2^128 bit và yêu cầu thực hiện 80 vòng lặp, nhiều hơn 25% so với SHA-256 với chỉ 64 vòng lặp, dẫn đến độ trễ cao hơn Thuật toán này xử lý dữ liệu theo khối 1024 bit, trong đó mỗi khối trải qua 80 vòng lặp sử dụng hằng số K, bộ đệm để lưu trữ kết quả trung gian, và đầu ra 64 bit được mở rộng từ w có kích thước 64 bit được tạo ra từ tin nhắn thô đầu vào.
Thuật toán SHA-512 có các phép toán cơ bản và được ký hiệu như sau:
ROTR n Phép dịch phải xoay vòng n bit
SHR n Phép dịch trái không xoay vòng n bit và thêm các bit 0 vào phía bên phải
Bảng 2.1 Các phép toán cơ bản của thuật toán SHA-512
Bước 1: Tiền xử lý dữ liệu:
- Chuyển thông điệp đầu vào về dạng nhị phân, ta được một chuỗi các bit có kích thước L
Thêm chuỗi bit 1000…0 vào cuối chuỗi đã nhận, sau đó tiếp tục nối thêm 128 bit từ thông điệp đầu vào Kết quả là một thông điệp mở rộng mới có độ dài là bội số của 1024.
Chia thông điệp thành n khối M1, M2, …, Mn với kích thước mỗi khối là 1024 bit Mỗi khối này sẽ được sử dụng làm đầu vào cho hàm băm trong quá trình xử lý dữ liệu.
Hình 2.2 Sơ đồ thuật toán SHA-512
Ba bước tiếp theo sẽ tính toán các giá trị được sử dụng trong mỗi vòng lặp: mở rộng từ wt, bộ đệm và hằng số kt
Mỗi tin nhắn đầu vào Mi của hàm băm được chia thành các từ wt, mỗi từ có kích thước 64 bit, tạo ra 16 từ mở rộng khởi tạo: w0, w1,…, w15.
Thuật toán này bao gồm 80 vòng lặp, với mỗi vòng lặp sử dụng một giá trị w riêng Đối với 16 vòng lặp đầu tiên, chúng ta đã tính được 16 giá trị w Các giá trị từ w16 đến w79 được tính theo công thức: w = σ(w) + w + σ(w) + w, trong đó σ(x) được định nghĩa là ROTR(x) ⊕ ROTR(x) ⊕ SHR(x).
Một bộ đệm có kích thước 64 bit, giá trị đầu ra có kích thước 512 bit nên ta có số bộ đệm cần dùng cho một vòng lặp là = 8
Ta có 8 bộ đệm: A, B, C, D, E, F, G, H có các giá trị ban đầu được biểu diễn bằng hệ thập lục phân là
Bộ đệm Giá trị ban đầu
Bảng 2.2 Giá trị ban đầu của 8 bộ đệm SHA-512
Giá trị ban đầu của 8 bộ đệm sẽ được sử dụng làm đầu vào cho vòng lặp đầu tiên Sau mỗi vòng lặp, các bộ đệm sẽ được tính toán lại dựa trên các công thức đã xác định.
Hằng số kt được biểu diễn dưới một ma trận 20*4 có các giá trị như trong hình sau:
Hình 2.3 Hằng số k của hàm băm SHA-512
Bước 5: Xử lý một khối dữ liệu:
Mỗi khối dữ liệu được xử lý thông qua hàm băm trải qua 80 vòng lặp, với khối dữ liệu Mi kích thước 1024 bit làm đầu vào, và giá trị băm đầu ra Hi có kích thước 512 bit.
Hình 2.4 Sơ đồ xử lý một khối dữ liệu trong SHA-512
XÂY DỰNG VÀ PHÁT TRIỂN ỨNG DỤNG XÁC THỰC AN TOÀN DỰA TRÊN MẬT KHẨU SỬ DỤNG MỘT LẦN OTP CHO THIẾT BỊ DI ĐỘNG
Mô tả chung
3.1.1 Mô tả hệ thống Ứng dụng xác thực sử dụng mật khẩu một lần OTP được xây dựng dựa trên thuật toán TOTP và chuẩn hàm băm SHA-512, gồm hai thành phần chính:
- Máy khách (client): là một ứng dụng trên thiết bị di động sử dụng hệ điều hành Android, có chức năng tạo ID giao dịch và tạo mã OTP
- Máy chủ (server): cài đặt trên máy tính cục bộ, có chức năng xác thực mã OTP được gửi đến từ phía máy khách
Hệ thống được thực hiện theo các bước sau:
- Máy chủ và máy khách thiết lập một kết nối an toàn
- Máy chủ và máy khách thực hiện trao đổi khóa bí mật chung K
- Người dùng sử dụng thiết bị di động tạo một ID giao dịch và máy khách sẽ gửi
ID giao dịch này sang phía máy chủ
- Máy khách tạo một mã OTP dựa trên khóa bí mật chung K và TC theo công thức:
Trong đó: TC là số bước thời gian
Sau đó gửi mã OTP này sang phía máy chủ để thực hiện xác thực
- Máy chủ kiểm tra ID giao dịch đã nhận được từ máy khách tạo một mã OTP dựa trên khóa bí mật chung K đã trao đổi lúc đầu
Máy chủ sẽ so sánh mã OTP từ máy khách với mã OTP do máy chủ tạo ra Nếu hai mã trùng khớp, giao dịch sẽ được thực hiện và thông báo sẽ được gửi đến thiết bị di động Ngược lại, nếu hai mã không trùng khớp, giao dịch sẽ bị từ chối và thông báo sẽ được gửi đến thiết bị di động.
Bước 1: Tạo giá trị HMAC-SHA-512 theo công thức:
Trong đó HS là một chuỗi có 64 byte,
Tx: giá trị của bộ đếm thời gian
Bước 2: Tạo một chuỗi 4 byte:
Trong đó: DT(String), String=String[0]…String[63] Đặt OffsetBits là 4 bit bậc thấp của String[63]
DT trả về 31 bit cuối cùng của P
Bước 3: Tính giá trị TOTP:
Snum=StToNum(Sbits), hàm này dùng để chuyển đổi S thành một số trong 0…2 31 -1
Digit là số chữ số giá trị TOTP được tính từ giá trị HMAC, ở đây lấy digit=6,
D là một số trong phạm vi 0…10 digit -1.
Phân tích hệ thống
Hình 3.1 Biểu đồ hoạt động
3.2.2 Biểu đồ ca sử dụng
3.2.2.1 Ca sử dụng tạo OTP
Hình 3.2 Biểu đồ ca sử dụng tạo OTP
Mô tả kịch bản ca sử dụng tạo OTP
Tên ca sử dụng Tạo OTP
Tác nhân Người dùng Điều kiện đầu vào Xác nhận thực hiện giao dịch
- Tác nhân thực hiện trao đổi khóa bí mật chung K với máy chủ
- Tác nhân thực hiện gửi ID giao dịch đến máy chủ
- Tác nhân thực hiện gửi yêu cầu tạo mã OTP dựa trên khóa bí mật chung K và TC
- Tác nhân gửi mã OTP đến máy chủ
Kết quả trả về Tạo mã OTP thành công
Bảng 3.1 Mô tả kịch bản ca sử dụng tạo OTP 3.2.2.2 Ca sử dụng xác thực OTP
Hình 3.3 Biểu đồ ca sử dụng xác thực OTP
Mô tả kịch bản ca sử dụng xác thực OTP
Tên ca sử dụng Xác thực OTP
Tác nhân Nhà cung cấp dịch vụ Điều kiện đầu vào Đã nhận được ID giao dịch, mã OTP từ máy khách
- Tác nhân thực hiện tạo mã OTP dựa trên khóa bí mật chung, ID giao dịch
- Tác nhân thực hiện so sánh hai mã OTP
- Nếu trùng thì thực hiện giao dịch
- Nếu không trùng thì thực hiện luồng phụ 1
Luồng 1: Tác nhân từ chối thực hiện giao dịch và gửi thông báo từ chối đến máy khách
Kết quả trả về Quá trình xác thực OTP được hoàn tất
Bảng 3.2 Mô tả kịch bản ca sử dụng xác thực OTP
3.2.3.1 Biểu đồ tuần tự tạo OTP
Hình 3.4 Biểu đồ tuần tự tạo OTP
3.2.3.2 Biểu đồ tuần tự xác thực OTP
Hình 3.5 Biểu đồ tuần tự xác thực OTP
3.2.4 Biểu đồ lớp hệ thống xác thực
Hình 3.6 Biểu đồ lớp hệ thống xác thực
Thiết kế hệ thống
3.3.1 Thiết kế cơ sở dữ liệu mức khái niệm
3.3.1.1 Xác định các thực thể
STT Thực thể Ghi chú
1 Người dùng Lưu trữ thông tin thiết bị người dùng
2 Nhà cung cấp dịch vụ Lưu trữ thông tin nhà cung cấp dịch vụ
Bảng 3.3 Các thực thể trong hệ thống mô phỏng 3.3.1.2 Xác định quan hệ giữa các thực thể
Thực thể Quan hệ Thực thể
Người dùng Giao dịch Nhà cung cấp dịch vụ
Bảng 3.4 Quan hệ giữa các thực thể trong hệ thống mô phỏng
3.3.1.3 Sơ đồ thực thể liên kết ERD
Hình 3.7 Sơ đồ thực thể liên kết ERD
3.3.2 Thiết kế cơ sở dữ liệu mức logic
Các thực thể trong cơ sở dữ liệu của ứng dụng được chuẩn hóa như sau:
- NguoiDung (ID_ND, TenND, ChungThuSo)
- NhaCCDV (ID_CC, TenCC, ChungThuSo)
- GiaoDich(ID_GD, ID_MC, ID_MK, LoaiGD, ThongTin, GiaTri, ThoiGianGD, OTP, TrangThaiXacThuc)
3.3.3 Thiết kế cơ sở dữ liệu mức vật lý
3.3.3.1 Danh mục các bảng a Bảng người dùng
STT Tên trường Kiểu dữ liệu Chú thích
1 ID_ND number Khóa chính
Bảng 3.5 Bảng người dùng b Bảng nhà cung cấp dịch vụ
STT Tên trường Kiểu dữ liệu Chú thích
1 ID_CC number Khóa chính
Bảng 3.6 Bảng nhà cung cấp dịch vụ c Bảng giao dịch
STT Tên trường Kiểu dữ liệu Chú thích
1 ID_GD number Khóa chính
2 ID_CC number Khóa phụ
3 ID_ND number Khóa phụ
Bảng 3.7 Bảng giao dịch 3.3.3.2 Mô hình dữ liệu quan hệ
Hình 3.8 Mô hình dữ liệu quan hệ
Hình 3.9 Giao diện tạo TOTP trên máy khách
Sau khi người dùng đồng ý thực hiện giao dịch, hệ thống sẽ hiển thị màn hình xác thực giao dịch bằng mật khẩu OTP thông qua Smart OTP tích hợp trong ứng dụng Khi nhấn nút “Xác nhận”, mã OTP cùng với thời gian xác thực sẽ được gửi từ máy khách đến máy chủ để hoàn tất quá trình xác thực giao dịch.
3.3.4.2 Giao diện thông báo xác thực thành công
Hình 3.10 Giao diện thông báo thành công
Sau khi máy khách gửi mã OTP, máy chủ sẽ tạo mã OTP riêng và so sánh với mã nhận được Nếu hai mã OTP trùng khớp, giao dịch sẽ được chấp nhận Sau khi hoàn tất giao dịch, hệ thống sẽ gửi thông báo thành công và hiển thị màn hình kết quả.
3.3.4.3 Giao diện thông báo xác thực thất bại
Hình 3.11 Giao diện thông báo thất bại
Sau khi thực hiện so sánh mã OTP, nếu hai mã không trùng nhau thì từ chối giao dịch và hiển thị thông báo thất bại cho người dùng.
Cài đặt thử nghiệm
Quy trình tạo và xác thực mã OTP trên thiết bị di động và máy chủ sử dụng chung các tham số sau:
- session_key: khóa phiên bí mật thống nhất chung giữa máy chủ và thiết bị di động
- number_of_digits: số ký tự của mã OTP
- interval: thời gian hiệu lực của mã OTP
3.4.2 Cài đặt thử nghiệm trên thiết bị di động Ứng dụng trên thiết bị di động được cài đặt thử nghiệm như sau:
- Môi trường cài đặt: Pydroid 3 trên hệ điều hành Android, là một trình soạn thảo Python 3 với đặc điểm dễ cài đặt và sử dụng
- Ngôn ngữ: Python 3, một ngôn ngữ lập trình hướng đối tượng cấp cao và mạnh mẽ
Thư viện Kivy và Pyotp là hai công cụ quan trọng trong việc phát triển ứng dụng Android Kivy giúp xây dựng giao diện người dùng cho ứng dụng, trong khi Pyotp được sử dụng để tạo mật khẩu một lần (OTP), tăng cường bảo mật cho người dùng.
3.4.3 Cài đặt thử nghiệm máy chủ
Hệ thống xác thực OTP trên máy chủ được cài đặt thử nghiệm như sau:
- Môi trường cài đặt: VSCode, là một trình soạn thảo mã nguồn, phát triển bởi Microsoft và XAMPP là phần mềm chạy webserver
- Ngôn ngữ: PHP 7.4.29, là một ngôn ngữ lập trình kịch bản, thường được sử dụng để phát triển các ứng dụng máy chủ
- Thư viện: HOTP/TOTP là một thư viện PHP được sử dụng để tạo mã xác thực sử dụng mật khẩu một lần OTP.