ĐẠI HỌC THÁI NGUYÊN
ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
LÊ THU HƯƠNG
NGHIÊN CỨU VẤN ĐỀ XÁC THỰC
GIAO DỊCH NGÂN HÀNG TRỰC TUYẾN SỬ DỤNG MẬT KHẨU DẠNG
OTP
LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH
THÁI NGUYÊN, 2016
ĐẠI HỌC THÁI NGUYÊN
ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
LÊ THU HƯƠNG
NGHIÊN CỨU VẤN ĐỀ XÁC THỰC
GIAO DỊCH NGÂN HÀNG TRỰC TUYẾN SỬ DỤNG MẬT KHẨU DẠNG
OTP
Chuyên ngành: Khoa học máy tính
Mã số: 60 48 01 01
LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH
Người hướng dẫn khoa học: TS. VŨ VINH QUANG
THÁI NGUYÊN, 2016
i
LỜI CAM ĐOAN
Sau quá trình học tập tại Trường Đại học công nghệ thông tin & truyền thông, với những kiến thức lý thuyết và thực hành đã tích lũy được, với việc vận
dụng các kiến thức vào thực tế, em đã tự nghiên cứu các tài liệu, các công trình
nghiên cứu, đồng thời có sự phân tích, tổng hợp, đúc kết và phát triển để hoàn thành
luận văn thạc sĩ của mình.
Em xin cam đoan luận văn này là công trình do bản thân em tự tìm hiểu,
nghiên cứu và hoàn thành dưới sự hướng dẫn của thầy giáo TS. Vũ Vinh Quang.
Thái Nguyên, tháng 12 năm 2016
Học viên
Lê Thu Hương
ii
LỜI CẢM ƠN
Trong thời gian hai năm của chương trình đào tạo thạc sỹ, trong đó gần một
nửa thời gian dành cho các môn học, thời gian còn lại dành cho việc lựa chọn đề tài, giáo viên hướng dẫn, tập trung vào nghiên cứu, viết, chỉnh sửa và hoàn thiện luận
văn. Với quỹ thời gian như vậy và với vị trí công việc đang phải đảm nhận, không
riêng bản thân em mà hầu hết các sinh viên cao học muốn hoàn thành tốt luận văn
của mình trước hết đều phải có sự sắp xếp thời gian hợp lý, có sự tập trung học tập
và nghiên cứu với tinh thần nghiêm túc, nỗ lực hết mình; tiếp đến cần có sự ủng hộ về tinh thần, sự giúp đỡ về chuyên môn một trong những điều kiện không thể thiếu
quyết định đến việc thành công của luận văn.
Để hoàn thành được luận văn này trước tiên em xin gửi lời cảm ơn đến thầy giáo hướng dẫn TS. Vũ Vinh Quang, người đã có những định hướng cho em về nội
dung và hướng phát triển của đề tài, người đã có những đóng góp quý báu cho em
về những vấn đề chuyên môn của luận văn, giúp em tháo gỡ kịp thời những vướng
mắc trong quá trình làm luận văn.
Em cũng xin cám ơn các thầy cô giáo Trường Đại học Công nghệ thông tin
và Truyền thông đã có những ý kiến đóng góp bổ sung cho đề tài luận văn của em.
Em xin hứa sẽ cố gắng hơn nữa, tự trau dồi bản thân, tích cực nâng cao năng
lực chuyên môn của mình để sau khi hoàn thành luận văn này sẽ có hướng tập trung
nghiên cứu sâu hơn, không ngừng hoàn thiện hơn nữa luận văn của mình để có
những ứng dụng thực tiễn cao trong thực tế.
Thái Nguyên, tháng 12 năm 2016
Học viên
Lê Thu Hương
iii
MỤC LỤC
LỜI CAM ĐOAN ........................................................................................................ i LỜI CẢM ƠN ............................................................................................................. ii
MỤC LỤC ................................................................................................................. iii
DANH MỤC CÁC CHỮ VIẾT TẮT ........................................................................ vi
DANH MỤC HÌNH VẼ ............................................................................................ vii MỞ ĐẦU .................................................................................................................... 1
Chương 1. MỘT SỐ KIẾN THỨC CƠ BẢN VỀ BẢO MẬT THÔNG TIN ....... 3
1.1. Giới thiệu về an toàn và bảo mật thông tin .......................................................... 3
1.1.1. Các khái niệm cơ bản ........................................................................................ 3
1.1.2. Mục tiêu của an toàn bảo mật thông tin ............................................................ 3
1.1.3. Các chiến lược an toàn hệ thống ....................................................................... 4
1.1.4. An toàn thông tin bằng mật mã ......................................................................... 5
1.2. Một số hệ mã hóa thông dụng .............................................................................. 8
1.2.1. Hệ mã RSA ....................................................................................................... 8
1.2.2. Hệ mã Rabin ...................................................................................................... 9 1.2.3. Hệ mã Elgamal ................................................................................................ 10
1.2.4. Hệ mã MHK (Merkle -Hellman Knapsack) .................................................... 11
1.2.5. Hệ mật mã Rabin ............................................................................................. 12
1.2.6. Hệ mật mã McEliece ...................................................................................... 13
1.3. Giới thiệu về mật khẩu ....................................................................................... 15
1.3.1. Định nghĩa ....................................................................................................... 15
1.3.2. Phương pháp xác thực ..................................................................................... 16
1.3.3. Độ an toàn ....................................................................................................... 17 Chương 2. MỘT SỐ KHÁI NIỆM VỀ OTP CÁC PHƯƠNG PHÁP ................ 26 2.1. Giới thiệu về OTP ............................................................................................. 26 2.1.1. Định nghĩa về OTP .......................................................................................... 26 2.1.2. Ưu điểm ........................................................................................................... 26 2.1.3. Nhược điểm ..................................................................................................... 27 2.2. Ứng dụng của OTP ............................................................................................ 27 2.2.1. Ứng dụng trong xác thực ................................................................................. 27 2.2.2. Ứng dụng trong đăng nhập .............................................................................. 28
iv
2.3. Giới thiệu về hàm băm mật mã, các thuật toán ................................................. 29
2.3.1. Giới thiệu ......................................................................................................... 29
2.3.2. Cấu trúc, vai trò của hàm băm mật mã ........................................................... 29 2.3.3. Một số hàm băm mật mã thông dụng .............................................................. 36
2.3.4. Các ứng dụng cơ bản của hàm băm ............................................................... 37
2.4. Một số phương pháp sinh OTP .......................................................................... 41
2.4.1. Phương pháp sinh theo thời gian ..................................................................... 41
2.4.2. Phương pháp sinh theo thuật toán ................................................................... 42 2.4.3. Phương pháp sinh theo giải pháp S/KEY ....................................................... 44
2.4.4. Phương pháp sinh sử dụng HOTP ................................................................... 44
2.4.5. Phương pháp sinh sử dụng Security token ...................................................... 44 2.4.6. Phương pháp sinh bằng giao thức ................................................................... 44
2.5. Các phương pháp chuyển giao OTP .................................................................. 45
2.5.1. Chuyển giao OTP bằng giấy ........................................................................... 45
2.5.2. Chuyển giao OTP bằng tin nhắn SMS ............................................................ 46
2.5.3. Tạo OTP sử dụng token .................................................................................. 47
2.5.4. Tạo OTP sử dụng điện thoại di động .............................................................. 49
2.5.5. Chuyển giao OTP sử dụng gmail .................................................................... 51
Chương 3. XÂY DỰNG CHƯƠNG TRÌNH ỨNG DỤNG XÁC THỰC SỬ DỤNG OTP TRONG GIAO DỊCH NGÂN HÀNG TRỰC TUYẾN ................. 53
3.1 Đặt vấn đề ........................................................................................................... 53
3.2 Mô hình sử dụng giao dịch trực tuyến của ngân hàng Eximbank ....................... 54
3.2.1. Giới thiệu Mobile OTP ................................................................................... 55
3.2.1. Hướng dẫn sử dụng Mobile OTP .................................................................... 56
3.3. Kết quả xây dựng mô hình thực nghiệm ............................................................ 56
3.4. Cài đặt ................................................................................................................ 56 3.5. Kết chương ......................................................................................................... 56 KẾT LUẬN .............................................................................................................. 57 TÀI LIỆU THAM KHẢO ...................................................................................... 58 PHỤ LỤC ................................................................................................................. 59
v
DANH MỤC CÁC CHỮ VIẾT TẮT
OTP DES One Time Password Data Encrypt Standar
RSA R.Rivest A.Shamir L.Adleman
MHK Merkle -Hellman Knapsack
SHA Secure Hash Algorithm
vi
DANH MỤC HÌNH VẼ
Hình 1: Hình 2: Mã hoá với khoá mã và khoá giải giống nhau ...................................... 6 Minh họa xác thực mật khẩu .............................................................. 15
Hình 3: Minh họa đăng nhập một lần .............................................................. 16
Hình 4: Mô hình đăng nhập duy nhất SSO ...................................................... 26
Hình 5: Cơ chế hoạt động của openSSO ......................................................... 30
Hình 6: Hình 7: Người dùng truy cập vào ứng dụng khi ................................................ 32 Người dùng truy cập ứng dụng mà chưa ............................................ 32
Hình 8: Sơ đồ phân loại hàm băm ................................................................... 34
Hình 9: Cấu trúc tổng quát của hàm băm ........................................................ 35 Hình 10: Mô hình sinh mã OTP theo thời gian ................................................. 39
Hình 11: Thiết bị sinh OTP - OTP Token ......................................................... 40
Hình 12: Ứng dụng Mobile OTP - IOS ............................................................. 40
Hình 13: Ứng dụng Mobile OTP - Window Phone 8. ....................................... 42
Hình 14: Mô hình xác thực người dùng dựa trên giao thức ................................. 44
Hình 15: Thẻ mật khẩu OTP với mật khẩu in sẵn của VinaGame .................... 45
Hình 16: Chuyển giao OTP bằng tin nhắn SMS ............................................... 46
Hình 17: Minh họa thẻ EMV ............................................................................. 48
Hình 18: Minh họa thiết bị E-Token ................................................................. 49
Hình 19: Mô hình kết nối SSL VPN đến Vigor2950 có điện thoại ................... 49
Hình 20: Cài đặt phần mềm sinh OTP trên iPhone với Vigor2950 ................... 51
Hình 21: Mô hình nhận OTP qua gmail ............................................................ 53
Hình 22: Hướng dẫn cài đặt ứng dụng Mobile OTP ......................................... 54
Hình 23: Hướng dẫn đăng nhập và kích hoạt dịch vụ ....................................... 54
Hình 24: Hình 25: Hình 26: Hình 27: Hình 28: Hình 29: Hướng dẫn sử dụng Mobile OTP để xác thực giao dịch .................... 55 Hướng dẫn chức năng đồng bộ OTP .................................................. 55 Hướng dẫn cấp lại mật khẩu ............................................................... 56 Hướng dẫn đổi mật khẩu .................................................................... 56 Người dùng đăng nhập vào hệ thống.................................................. 56 Người dùng nhập thông tin chuyển khoản ......................................... 56
Hình 30: Người dùng chấp nhận chuyển khoản ................................................ 56
Hình 31: Người dùng chuyển khoản thành công ............................................... 56
Hình 32: Mô tả lịch sử giao dịch ....................................................................... 56
1
MỞ ĐẦU
Trong kĩ thuật bảo mật thông tin, mật khẩu (password) được sử dụng rộng rãi
trong quá trình đăng nhập (log-on) để xác thực người dùng khi truy nhập vào các hệ thống máy tính và mạng, các phần mềm ứng dụng trên máy tính cá nhân, máy chủ
công ty và cả website của các tổ chức tài chính, ngân hàng. Phương pháp phổ thông
thường hay dùng nhất để xác thực người dùng chỉ là mật khẩu (tên đăng nhập
username - password). Tuy nhiên, hầu hết các chuyên gia bảo mật đều đánh giá là
việc sử dụng password không còn an toàn trước các thủ đoạn tấn công tinh vi hiện nay. Mật khẩu có thể bị nghe lén, bị đánh cắp, hoặc bị phá mã. Một trong những
hướng nghiên cứu để tăng cường độ an toàn của hệ thống là mật khẩu sử dụng một
lần OTP (One Time Password). Đây là phương pháp được giới thiệu để tăng cường độ an toàn trong quá trình xác thực người dùng, xác thực các giao dịch, đặc biệt là
các giao dịch thanh toán trực tuyến trong các hệ thống ngân hàng đang được sử
dụng phổ biến hiện nay.
Đề tài "Nghiên cứu vấn đề xác thực giao dịch ngân hàng trực tuyến sử dụng
mật khẩu dạng OTP" được lựa chọn với mục đích nghiên cứu sâu về mật khẩu sử
dụng một lần, các phương pháp sinh và tạo mật khẩu sử dụng một lần và ứng dụng
trong việc xác thực các giao dịch ngân hàng, cài đặt thử nghiệm ứng dụng mật khẩu
sử dụng một lần để nâng cao an toàn cho xác thực các giao dịch ngân hàng trực
tuyến. Mục đích của luận văn
Tìm hiểu nghiên cứu sâu về mật khẩu sử dụng một lần, các phương pháp
sinh và tạo mật khẩu sử dụng một lần và ứng dụng trong xác thực giao dịch ngân
hàng trực tuyến.
Đối tượng và phạm vi nghiên cứu Luận văn tìm hiểu nghiên cứu về lý thuyết mật mã, các thuật toán mã hóa cơ bản, lý thuyết về hàm băm và thuật toán mã hóa SHA-1, lý thuyết về OTP và vấn đề xác thực các giao dịch ngân hàng trực tuyến. Xây dựng hệ thống xác thực các giao dịch ngân hàng bằng mật khẩu sử dụng 1 lần OTP trên ngôn ngữ Java.
Cấu trúc của luận văn gồm có Phần mở đầu: Nêu lý do chọn đề tài và hướng nghiên cứu chính
Chương 1: Các kiến thức cơ bản về lý thuyết bảo mật thông tin, một số thuật
toán mã hóa cơ bản, khái niệm về mật khẩu và ứng dụng.
2
Chương 2: Giới thiệu tổng quan về mật khẩu OTP, các ứng dụng cơ bản, các
phương pháp sinh mật khẩu OTP, các phương pháp chuyển giao
Chương 3: Xây dựng chương trình ứng dụng xác thực trong giao dịch trực
tuyến tại các ngân hàng Việt Nam dựa trên mật khẩu OTP
3
Chương 1 MỘT SỐ KIẾN THỨC CƠ BẢN
VỀ BẢO MẬT THÔNG TIN
Nội dung chính của chương 1 sẽ giới thiệu các khái niệm cơ bản về lý thuyết
an toàn và bảo mật thông tin thông qua các hệ mật mã và mật khẩu, các kiến thức cơ
bản này đã được tham khảo trong các tài liệu [1, 5, 6, 8].
1.1. Giới thiệu về an toàn và bảo mật thông tin 1.1.1 Các khái niệm cơ bản
Trong thời đại ngày nay, các phương thức truyền đạt thông tin ngày càng đa
dạng và phát triển. Với sự ra đời của máy tính và mạng máy tính, việc trao đổi thông tin đã trở nên dễ dàng hơn, nhanh chóng hơn, đa dạng hơn. Nhưng kèm theo
đó là các nguy cơ xâm phạm thông tin cũng ngày càng tăng. Khi nhu cầu trao đổi
thông tin dữ liệu ngày càng lớn và đa dạng, các tiến bộ về điện tử - viễn thông và
công nghệ thông tin không ngừng được phát triển ứng dụng để nâng cao chất lượng
và lưu lượng truyền tin thì các quan niệm ý tưởng và biện pháp bảo vệ thông tin dữ
liệu cũng được đổi mới. Bảo vệ an toàn thông tin dữ liệu là một chủ đề rộng, có liên
quan đến nhiều lĩnh vực và trong thực tế có thể có rất nhiều phương pháp được thực
hiện để bảo vệ an toàn thông tin dữ liệu. Các phương pháp bảo vệ an toàn thông tin
dữ liệu có thể được phân thành ba nhóm sau:
+ Bảo vệ an toàn thông tin bằng các biện pháp hành chính.
+ Bảo vệ an toàn thông tin bằng các biện pháp kỹ thuật (phần cứng).
+ Bảo vệ an toàn thông tin bằng các biện pháp thuật toán (phần mềm).
Ba nhóm trên có thể được ứng dụng riêng rẽ hoặc phối kết hợp. Môi trường
khó bảo vệ an toàn thông tin nhất và cũng là môi trường đối phương dễ xâm nhập
nhất đó là môi trường mạng và truyền tin. Biện pháp hiệu quả nhất và kinh tế nhất hiện nay trên mạng truyền tin và mạng máy tính là biện pháp thuật toán.
1.1.2. Mục tiêu của an toàn bảo mật thông tin
Một hệ thống an toàn thông tin cần đảm bảo các yếu tố sau đây: + Tính bí mật (Confjdentialy): Đảm bảo dữ liệu được truyền đi một cách an toàn và không thể bị lộ thông tin. Chỉ những người được phép mới có khả năng đọc
được nội dung thông tin ban đầu.
4
+ Tính xác thực (Authentication): Giúp cho người nhận dữ liệu xác định
được chắc chắn dữ liệu mà họ nhận là dữ liệu gốc ban đầu. Người nhận có khả năng
kiểm tra nguồn gốc thông tin mà họ nhận được.
+ Tính toàn vẹn (Integrity): dữ liệu không bị thay đổi trong quá trình
truyền đi.
+ Tính không thể chối bỏ (Non-repudation): Người gửi hay người nhận
không thể chối bỏ sau khi đã gửi hoặc nhận thông tin.
1.1.3. Các chiến lược an toàn hệ thống Để xây dựng một hệ thống an toàn thông tin, người ta thường sử dụng các
chiến lược sau:
+ Giới hạn quyền hạn tối thiểu (Last Privilege): Đây là chiến lược cơ bản nhất theo nguyên tắc này bất kỳ một đối tượng nào
cũng chỉ có những quyền hạn nhất định đối với tài nguyên mạng, khi thâm nhập vào
mạng đối tượng đó chỉ được sử dụng một số tài nguyên nhất định.
+ Bảo vệ theo chiều sâu (Defence InDepth):
Xây dựng hệ thống bảo vệ theo chiều sau để đảm bảo nâng cao hệ số an toàn.
+ Nút thắt (Choke Point):
Tạo ra một “cửa khẩu” hẹp và chỉ cho phép thông tin đi vào hệ thống bằng
con đường duy nhất chính, từ đó xây dựng tổ chức một cơ cấu kiểm soát và điều
khiển thông tin đi qua cửa này.
+ Điểm nối yếu nhất (Weakest Link):
Cần phải gia cố các vị trí yếu điểm nhất của hệ thống. Thông thường chúng
ta chỉ quan tâm đến người tấn công trên mạng hơn là kẻ tiếp cận hệ thống, do đó an
toàn vật lý được coi là yếu điểm nhất trong hệ thống của chúng ta.
+ Tính toàn cục:
Các hệ thống an toàn đòi hỏi phải có tính toàn cục của các hệ thống cục bộ. Nếu có thể bẻ gãy một cơ chế an toàn thì chúng có thể thành công bằng cách tấn công hệ thống tự do của ai đó và sau đó tấn công hệ thống từ nội bộ bên trong.
- Tính đa dạng bảo vệ: Cần phải sử dụng nhiều biện pháp bảo vệ khác nhau cho hệ thống khác nhau, nếu không có người tấn công vào được một hệ thống thì chúng cũng dễ dàng tấn
công vào các hệ thống khác.
5
1.1.4. An toàn thông tin bằng mật mã
Mật mã là một ngành khoa học chuyên nghiên cứu các phương pháp truyền
tin bí mật. Mật mã bao gồm: Lập mã và phá mã. Lập mã bao gồm hai quá trình: mã hóa và giải mã.
Để bảo vệ thông tin trên đường truyền người ta thường biến đổi nó từ dạng
nhận thức được sang dạng không nhận thức được trước khi truyền đi trên mạng, quá
trình này được gọi là mã hoá thông tin (encryption), ở trạm nhận phải thực hiện quá
trình ngược lại, tức là biến đổi thông tin từ dạng không nhận thức được (dữ liệu đã được mã hoá) về dạng nhận thức được (dạng gốc), quá trình này được gọi là giải
mã. Đây là một lớp bảo vệ thông tin rất quan trọng và được sử dụng rộng rãi trong
môi trường mạng.
Vai trò của hệ mật mã + Che dấu nội dung của văn bản rõ (PlainText) để đảm bảo sao cho chỉ người
chủ hợp pháp của thông tin mới có quyền truy cập thông tin (Secrety), hay nói cách
khác là chống truy nhập không đúng quyền hạn.
+ Tạo các yếu tố xác thực thông tin, đảm bảo thông tin lưu hành trong hệ
thống đến người nhận hợp pháp là xác thực (Authenticity).
+ Tổ chức các sơ đồ chữ ký điện tử, đảm bảo không có hiện tượng giả mạo,
mạo danh để gửi thông tin trên mạng.
Ưu điểm lớn nhất của bất kỳ hệ mật mã nào đó là có thể đánh giá được độ
phức tạp tính toán phải giải quyết bài toán để có thể lấy được thông tin của dữ liệu
đã được mã hoá. Tuy nhiên mỗi hệ mật mã có một số ưu và nhược điểm khác nhau,
nhưng nhờ đánh giá được độ phức tạp tính toán mà ta có thể áp dụng các thuật toán
mã hoá khác nhau cho từng ứng dụng cụ thể tuỳ theo độ yêu cầu về độ an toàn.
Các thành phần của một hệ mật mã: Một hệ mật mã là một bộ 5 (P,C,K,E,D) thoả mãn các điều kiện sau: + P: Là một tập hợp hữu hạn các bản rõ, nó được gọi là không gian bản rõ. + C: Là tập hữu hạn các bản mã, nó được gọi là không gian bản mã. Mỗi phần tử của C có thể nhận được bằng cách áp dụng phép mã hoá Ek lên một phần tử
của P, với k K
+ K: Là tập hữu hạn các khoá hay còn gọi là không gian khoá. Đối với mỗi phần tử k của K được gọi là một khoá. Số lượng của không gian khoá phải đủ lớn để “kẻ địch” không có đủ thời gian để thử mọi khoá có thể (phương pháp vét cạn). Đối với
6
mỗi k K có một quy tắc mã ek: PC và một quy tắc giải mã tương ứng dk D. Mỗi
ek: P C và dk: CP là những hàm mà: Dk (ek(x))=x với mọi bản rõ x P.
Hình 1: Mã hoá với khoá mã và khoá giải giống nhau
Tiêu chuẩn đánh giá hệ mật mã Để đánh giá một hệ mật mã người ta thường đánh giá thông qua các tiêu chí sau:
+ Độ an toàn: Một hệ mật được đưa vào sử dụng điều đầu tiên phải có độ an
toàn cao. Ưu điểm của mật mã là có thể đánh giá được độ an toàn thông qua độ an toàn tính toán mà không cần phải cài đặt. Một hệ mật được coi là an toàn nếu để phá
hệ mật mã này phải dùng n phép toán. Mà để giải quyết n phép toán cần thời gian
vô cùng lớn, không thể chấp nhận được. Một hệ mật mã được gọi là tốt thì nó cần
phải đảm bảo các tiêu chuẩn sau:
- Chúng phải có phương pháp bảo vệ mà chỉ dựa trên sự bí mật của các khoá,
công khai thuật toán.
- Khi cho khoá công khai eK và bản rõ P thì chúng ta dễ dàng tính được eK(P) = C. Ngược lại khi cho dK và bản mã C thì dễ dàng tính được dK(M)=P. Khi không biết dK thì không có khả năng để tìm được M từ C, nghĩa là khi cho hàm f: X Y thì việc tính y=f(x) với mọi x thuộc X là dễ còn việc tìm x khi biết y lại là vấn đề khó và nó được gọi là hàm một chiều.
- Bản mã C không được có các đặc điểm gây chú ý, nghi ngờ. + Tốc độ mã và giải mã: Khi đánh giá hệ mật mã chúng ta phải chú ý đến tốc
độ mã và giải mã. Hệ mật tốt thì thời gian mã và giải mã nhanh.
7
+ Phân phối khóa: Một hệ mật mã phụ thuộc vào khóa, khóa này được
truyền công khai hay truyền khóa bí mật. Phân phối khóa bí mật thì chi phí sẽ cao
hơn so với các hệ mật có khóa công khai. Vì vậy đây cũng là một tiêu chí khi lựa chọn hệ mật mã.
Phân loại hệ mật mã Có nhiều cách để phân loại hệ mật mã. Dựa vào cách truyền khóa có thể
phân các Hệ mật mã thành hai loại:
- Hệ mật mã đối xứng (hay còn gọi là mật mã khóa bí mật): là những hệ mật
mã dùng chung một khoá cả trong quá trình mã hoá dữ liệu và giải mã dữ liệu. Do đó khoá phải được giữ bí mật tuyệt đối.
- Hệ mật mã bất đối xứng (hay còn gọi là mật mã khóa công khai) : Hay còn
gọi là hệ mật mã công khai, các hệ mật mã này dùng một khoá để mã hoá sau đó dùng một khoá khác để giải mã, nghĩa là khoá để mã hoá và giải mã là khác nhau.
Các khoá này tạo nên từng cặp chuyển đổi ngược nhau và không có khoá nào có thể
suy được từ khoá kia. Khoá dùng để mã hoá có thể công khai nhưng khoá dùng để
giải mã phải giữ bí mật.
Ngoài ra nếu dựa vào thời gian đưa ra hệ mật mã ta còn có thể phân làm hai
loại: Mật mã cổ điển (là hệ mật mã ra đời trước năm 1970) và mật mã hiện đại (ra
đời sau năm 1970). Còn nếu dựa vào cách thức tiến hành mã thì hệ mật mã còn
được chia làm hai loại là mã dòng (tiến hành mã từng khối dữ liệu, mỗi khối lại dựa
vào các khóa khác nhau, các khóa này được sinh ra từ hàm sinh khóa, được gọi là
dòng khóa) và mã khối (tiến hành mã từng khối dữ liệu với khóa như nhau).
1.2 Một số hệ mã hóa thông dụng
1.2.1 Hệ mã RSA
Hệ mật mã RSA ra đời năm 1976 bởi các tác giả R.Rivets, A.Shamir, và L.Adleman. Sơ đồ mã hoá RSA là sơ đồ mã hoá khối, đoạn tin được mã hoá từng khối với mỗi khối có giá trị < n với n là số nguyên đủ lớn. RSA là hệ mã dựa vào bài toán logarit rời rạc và bài toán phân tích một số nguyên thành tích các thừa số nguyên tố, là hệ mã được sử dụng rộng rãi nhất. Nó cung cấp cả sự bí mật và chữ ký điện tử, và tính bảo mật của nó là cơ sở cho độ khó trong vấn đề tìm thừa số nguyên tố.
Thuật toán
Tạo khoá: Mỗi thực thể tạo một khoá công khai và một khoá riêng tương ứng. Thực thể A cần làm công việc sau:
8
1. Tạo 2 số nguyên tố lớn p và q bất kỳ có cỡ xấp xỉ nhau.
2. Tính n = p×q và Ф(n)= (p-1)(q-1).
3. Chọn 1 số nguyên e, 1 4. Sử dụng thuật toán Euclid mở rộng để tính d, 1 (mod Ф(n)) 5. Khoá công khai của A là (n, e), khoá riêng của A là d.
Mã hoá: B mã hoá một văn bản gửi cho A. 1. Nhận được khoá xác thực công khai của A là (n, e). 2. Trình bày văn bản như một số nguyên m thuộc [0, n-1].
3. Tính c = me mod n.
4. Gửi bản mã c cho A.
Giải mã: Để khôi phục bản rõ m từ bản mã c, A phải thực hiện công việc sau: Sử dụng khoá riêng d để tính m = cd mod n. Một số tính chất của hệ RSA
Trong các hệ mật mã RSA, một bản tin có thể được mã hoá trong thời gian tuyến tính. Đối với các bản tin dài, độ dài của các số được dùng cho các khoá có thể được coi như là hằng. Tương tự như vậy, nâng một số lên luỹ thừa được thực hiện trong thời gian hằng, các số không được phép dài hơn một độ dài hằng. Thực ra tham số này che dấu nhiều chi tiết cài đặt có liên quan đến việc tính toán với các con số dài, chi phí của các phép toán thực sự là một yếu tố ngăn cản sự phổ biến ứng dụng của phương pháp này. Phần quan trọng nhất của việc tính toán có liên quan đến việc mã hoá bản tin. Nhưng chắc chắn là sẽ không có hệ mã hoá nào hết
nếu không tính ra được các khoá của chúng là các số lớn. Các khoá cho hệ mã hoá RSA có thể được tạo ra mà không phải tính toán quá nhiều. Mỗi số nguyên tố lớn có thể được phát sinh bằng cách đầu tiên tạo ra một số ngẫu nhiên lớn, sau đó kiểm tra các số kế tiếp cho tới khi tìm được một số nguyên tố. Các bước tính p dựa vào thuật toán Euclid. Độ an toàn của thuật toán RSA dựa trên cơ sở những khó khăn của việc xác định các thừa số nguyên tố của một số lớn. 1.2.2 Hệ mã Rabin Đây là hệ mật có độ an toàn cao về mặt tính toán chống lại được cách tấn công bản rõ. Thuật toán Tạo khoá: Mỗi thực thể tạo một khoá công khai và một khoá riêng tương ứng. Mỗi thực thể A cần thực hiện các công việc sau: 1. Tạo hai số nguyên tố lớn p và q có cỡ xấp xỉ nhau.
2. Tính n=p×q. 3. Khoá công khai của A là n, khoá riêng của A là (p,q). Mã hoá: B mã hoá văn bản m gửi cho A. 1. Nhận được khoá công khai xác thực của A là n. 2. Biểu diễn đoạn văn bản là một số nguyên trong miền: {0, 1, . . , n-1}
3. Tính c = m2 mod n.
4. Gửi bản mã c cho A. Giải mã: Khôi phục bản rõ m từ c, cần phải dùng thuật toán tìm căn bậc hai
theo modulo n từ số nguyên tố p và q đã cho để tính ra 4 căn bậc hai m1, m2, m3 và
m4 của c theo modulo n. Khi đó văn bản đã gửi là một trong các giá trị m1, m2, m3
hoặc m4. A bằng cách này hay cách khác quyết định đâu là m. Tính bảo mật
Do việc phân tích n thành thừa số là rất khó nên lược đồ mã khoá công khai Rabin là minh chứng bảo đảm chống lại sự tấn công của đối phương. Tuy nhiên, lược đồ mã khoá công khai Rabin không chống lại được sự tấn công bản mã chọn trước. Mặt hạn chế của lược đồ mã khoá công khai Rabin là người nhận phải lựa chọn chính xác bản rõ từ 4 khả năng. Sự nhập nhằng trong giải mã có thể dễ dàng khắc phục trong thực tế bằng cách thêm phần mở rộng vào bản rõ trước khi mã hoá. Khi đó, với xác
suất cao, chính xác một trong bốn căn bậc 2: m1, m2, m3, m4 của bản mã c sẽ có phần
mở rộng này, và người nhận sẽ chọn đó là bản rõ mong đợi. Nếu không có căn bậc 2 nào của c có phần mở rộng này thì người nhận từ chối. Nếu phần mở rộng được sử dụng như đã nói ở trên, lược đồ Rabin không dễ bị tấn công bằng bản mã chọn trước. 1.2.3 Hệ mã Elgamal Hệ mã Elgamal xây dựng dựa trên bài toán logarit rời rạc là bài toán được dùng nhiều trong thủ tục mật mã. P . Thuật toán
Tạo khoá: Mỗi thực thể tạo một khoá công khai và một khoá riêng tương ứng.
1. Tạo một số nguyên tố p và phần tử sinh nhóm nhân Z* 2. Chọn một số nguyên a, 1 a p-2, và tính mod p. 3. Khoá công khai của A là (p, , ); khoá riêng là a. Mã hoá: B mã hoá văn bản m gửi cho A. 1. Thu được khoá công khai của A (p, , ). 2. Biểu diễn văn bản như một số nguyên m trong {0, 1,..,p-1}.
3. Chọn ngẫu nhiên một số nguyên k, 1 k p-2. 4. Tính mod p và mod p. 5. Gửi bản mã c = cho A. mod p. Giải mã: Khôi phục bản rõ m từ c bằng việc tính
Chú ý: Một bất lợi của mã hoá Elgamal là sự mở rộng của văn bản, bản mã có thể dài gấp 2 lần so với bản rõ. Mã hoá Elgamal là một trong những lược đồ mã hoá sử dụng sự ngẫu nhiên trong tiến trình mã hoá. Những nguyên tắc cơ bản đằng
sau kỹ thuật mã hoá ngẫu nhiên là sử dụng tính ngẫu nhiên để tăng thêm sự bảo mật bằng mật mã của tiến trình mã hoá theo một trong các phương thức sau:
1. Tăng dần khoảng trống trong bản rõ một cách phù hợp.
2. Ngăn ngừa hoặc làm suy giảm sự có hiệu lực của sự tấn công bản rõ chọn trước thông qua ánh xạ một - nhiều từ bản rõ đến bản mã. Tính bảo mật Vấn đề bẻ khoá lược đồ mã hoá Elgamal, khôi phục m từ p, , , , và tương đương với giải quyết vấn đề Diff-Hellman. Trên thực tế, lược đồ mã hoá Elgamal được xem như sự thay đổi khoá Diff-Hellman để quyết định khoá
, và
việc mã hoá văn bản bằng tính nhân với khoá đó. Vì lý do này, tính bảo mật của
lược đồ mã hoá Elgamal được gọi là cơ sở trong vấn đề logarithm rời rạc trong Z*
P
1.2.4 Hệ mã MHK (Merkle -Hellman Knapsack) Sơ đồ mã khoá công khai ba lô dựa trên cơ sở của bài toán tập con, quan điểm cơ bản là chọn một trường hợp của bài toán tổng con mà dễ dàng tìm lời giải,
sau đó che giấu nó như một trường hợp của bài toán tổng con tổng quát khó có hy
vọng giải được. Khoá được thiết lập ban đầu có thể dùng như khoá riêng, còn khoá
được thiết lập sau khi biến đổi là khoá công khai. Sơ đồ mã hoá MHK che giấu lời
giải bằng phép nhân theo modulo và phép hoán vị. Định nghĩa một dãy siêu tăng là một dãy các số nguyên dương (b1,b2, ..., bn) với mỗi i, 2 i thoả mãn tính chất n. Thuật toán
Tạo khoá: Mỗi thực thể tạo một khoá công khai và một khoá riêng tương ứng. Một số nguyên n được cố định như một tham số hệ thống phổ biến. của n số nguyên {1,2,...,n}. , M, W, (b1,b2, ..., bn)). 1. Chọn một dãy siêu tăng (b1, b2, ..., bn) và modulo M sao cho
M > b1 + b2 + ... + bn.
2. Chọn số nguyên ngẫu nhiên W 1 W M-1 sao cho UCLN(W, M) = 1.
3. Chọn một phép hoán vị ngẫu nhiên
4. Tính ai = Wb (i) mod M với i = 1, 2, ..., n.
5. Khoá công khai là (a1, a2, ..., an), khoá riêng là (
Mã hoá: B mã hoá văn bản m gửi cho A.
1. Thu được khoá công khai (a1, a2, ..., an) của A.
2. Biểu diễn văn bản m như một chuỗi nhị phân có độ dài n, m=m1m2...mn.
3. Tính số nguyên c = m1a1 + m2a2 + ... + mnan.
4. Gửi bản mã c cho A. Giải mã: Để khôi phục bản rõ m từ c, cần thực hiện các công việc sau:
1. Tính d = W-1c mod M.
2. Sử dụng thuật toán tìm lời giải bài toán tổng dãy siêu tăng để tìm các số nguyên r1,r2,...,rn,ri{0,1}, sao cho d=r1b1+r2b2+ ... +rnbn. (i), i = 1, 2, ..., n. 3. Các bit văn bản m là mi = r Tính bảo mật
Lược đồ mã hoá MHK có thể bị bẻ khoá bởi thuật toán thời gian đa thức. i Trong cách thiết lập khoá công khai, thuật toán này tìm một cặp số nguyên U’, M’
sao cho U’/M’ là tỉ lệ với U/M (W và M là một phần khoá riêng, và U=W-1 mod M)
và sao cho các số nguyên b’i = U’ai mod M, 1
n từ dãy siêu tăng. Dãy này có
thể được một đối thủ sử dụng thay thế vào dãy (b1, b2, ..., bn) để giải mã văn bản. 1.2.5 Hệ mật mã Rabin Đây là hệ mật mã dựa trên độ phức tạp của việc tính căn bậc hai theo hợp số.
Đây là hệ mật mã có độ an toàn về mặc tính toán chống lại được tấn công bản rõ lựa
chọn và không có khả năng phân tích được n=pq. Thuật toán được ứng dụng rất
nhiều trong thực tế. Quá trình tạo khóa: Để tạo ra khóa A cần phải thực hiện các thao tác sau: 1. Chọn 2 số nguyên tố ngẫu nhiên p và q, thỏa mãn điều kiện sau: . 2. Tính tích p và q: . 3. Chọn số ngẫu nhiên b . 4. Sử dụng cặp (n, b) làm cặp khóa công cộng và cặp (p, q) làm khóa mật.
Quá trình mã hóa: Để gởi thông tin mật cho A, B cần tạo ra bảng mã c như sau: Quá trình giải mã: Để giải mã bản mã c, A giải phương trình bậc hai sau: Với M mã được thực hiện bởi A sẽ khôi phục lại bản rõ được mã hóa bới B. Giải phương trình bậc 2, chúng ta có nghiệm chung dạng: , ở đây bởi vì c phụ thuộc vào phần tử , nên phương trình bậc hai: , Có nghiệm trong . Một trong các nghiệm của nó là số m, được gởi bởi B. Từ đây dẫn đến phải là thặng dư bậc hai theo modulo n, hay là phần tử của nhóm QRn. 1.2.6 Hệ mật mã McEliece Hệ mật mã McEliece được đề xuất năm 1978, tác giả của nó là Robert McEliece. Ý tưởng của bài toán này giống với ý tưởng của hệ mật mã Merkle-
Hellman: Phép giải mã là trường hợp đặc biệt của bài toán NP đầy đủ. Gọi C[n,k] là mã tuyến tính, t là số bít bị sai khi truyền bản mã qua kênh , .
nhiểu, các tham số này có liên quan với nhau bằng các hệ thức:
Để áp dụng trong thực tế hệ mật mã công khai McEliece đề nghị chọn 1024, t = 50. Hệ mật mã McEliece hình thành như sau: A và B muốn truyền tin mật cho nhau bằng hệ mật mã McEliece. Trước tiên A phải hình thành khóa như sau: Quá trình hình thành khóa: 1. A chọn mã tuyến tính C[n, k] có thể sửa được t lỗi. Mã này phải có thuật toán giải mã hiệu quả. 2. A tạo ra ma trận sinh G cấp cho mã C. 3. Chọn S là ma trận khả nghịch cấp . 4. Chọn tiếp ma trận hoán vị P cấp . 5. Tính ma trận G’ cấp
: G’=SGP.
6. A công khai khóa công cộng (G’, t) và giử kín khóa mật (G, P, S).
Quá trình mã hóa: B muốn gởi thông tin mật m cho A, B sử dụng khóa công cộng (G’,t) và tiến hành mã hóa theo các bước sau: 1. Mã hóa bản tin x ở dạng nhị phân chiều dài k.
2. Tính véc tơ c’=xG’.
3. Tạo ra một véc tơ ngẫu nhiên e, có trọng số t và chiều dài n.
4. Hình thành bản mã: y=c’+e.
Quá trình giải mã:
1. Tính ma trận khả nghịch của P là P-1. . 2. Tính
3. Sử dụng thuật toán giải mã code C để giải mã y’ thành y”. 4. Tính toán bản rõ: x=
Chúng ta tìm hiểu rõ hơn về phần giải mã, chúng ta có: =(c’+e)P-1=(xSGP+e)P-1=xSG+e’ Ở đây e’ là véc tơ có trọng số là t. A dùng thuật toán giải mã của mình để véc cạn các gía trị có thể của e’ và từ đó tìm xSG và từ đây chúng ta tính x dễ dàng bằng
cách nhân với ma trận nghịch đảo. 1.3 Giới thiệu về mật khẩu
1.3.1 Định nghĩa Hiện nay, đăng nhập (log-on) là một khâu quan trọng trong đảm bảo an toàn
cho hệ thống máy tính và mạng. Thông thường, người dùng phải cung cấp một tên
truy nhập (username) và mật khẩu (password) kèm theo để đăng nhập vào hệ thống.
Tên truy nhập là một tên do người dùng lựa chọn theo quy ước hệ thống đặt ra và phải duy nhất trong một hệ thống. Trong khi tên truy nhập thường không cần giữ bí
mật thì mật khẩu luôn cần giữ bí mật - chỉ người dùng biết mật khẩu của mình. Vậy mật khẩu là gì? Mật khẩu là một hay nhiều từ mà người dùng phải biết để được cấp quyền truy cập, là một dạng thông tin đặc biệt như chuỗi các ký tự, hình ảnh, dấu vân tay… dùng để xác thực, chứng minh tính chính xác một người khi đăng nhập vào
một hệ thống, một dịch vụ hay một ứng dụng nào đó. 1.3.2 Phương pháp xác thực Để đảm bảo an toàn, mật khẩu cần được giữ bí mật và chỉ bản thân người dùng mới biết. Mật khẩu thường được sử dụng trong một thời gian dài và trao đổi thường xuyên giữa máy khách (client) của người sử dụng với máy chủ (server). Sau khi người dùng gõ mật khẩu của mình, bên phía client sẽ xác thực mật khẩu với server. Nếu mật khẩu đúng server sẽ xác nhận và cấp quyền truy nhập tương ứng cho client và qua đó tới người dùng. Hình 2: Minh họa xác thực mật khẩu. 2.1.3. Độ an toàn Do mật khẩu thường được gửi từ client đến server dưới dạng rõ (plaintext) nên nó dễ dàng bị đánh cắp, lạm dụng và có thể gây thiệt hại cho người dùng và đe dọa đến an toàn của hệ thống. Các chương trình mã độc như "Trojan horse" và "key logger" thường được người tấn công dùng cho mục đích này. Thông thường, để dò tìm mật khẩu, các người tấn công thường sử dụng cách thức tấn công vét cạn
(Brute-force), là cách thức sử dụng các công cụ để tự động thử nghiệm lần lượt các
chuỗi ký tự cho đến khi tìm ra mật khẩu đúng. Do vậy, nếu sử dụng các mật khẩu
quá đơn giản hay quá ngắn, việc sử dụng phương pháp tấn công dựa trên từ điển
hoặc vét cạn có thể giúp người tấn công dễ dàng dò ra mật khẩu của người dùng mà
không mất quá nhiều thời gian. Trên thực tế, một mật khẩu an toàn cần thỏa mãn các yêu cầu sau: Độ dài của mật khẩu phải từ 8 ký tự trở lên. Khi độ dài mật khẩu đủ lớn, khả năng bị đoán hoặc tấn công vét cạn giảm đi; Mật khẩu không nên chứa các từ đơn giản, dễ đoán, như tên người thân,
tên con vật yêu thích, hoặc ngày tháng năm sinh. Các mật khẩu như vậy thường dễ dàng bị dò tìm thông qua tấn công dựa trên từ điển; Mật khẩu phải là tổ hợp của các chữ cái in hoa, in thường, chữ số và ký
tự đặc biệt (như các ký tự $ #,...). Khi số loại ký tự được sử dụng tăng lên, số tổ hợp mật khẩu có thể có trở lên rất lớn làm cho việc thực hiện tấn công vét cạn không khả thi. Kết luận
Trong chương 1, luận văn đã trình bày một số kiến thức cơ bản về an toàn và
bảo mật thông tin, một số thuật toán mã hóa, khái niệm về mật khaur cvà ứng dụng trong bảo mật thông tin. Các kiến thức này làm cơ sở để luận văn nghiên cứu về các nội dung quan trọng trong chương 2 và chương 3. Chương 2
MỘT SỐ KHÁI NIỆM VỀ OTP CÁC PHƯƠNG PHÁP XÁC LẬP Nội dung chính của chương 2 tập chung giới thiệu về mật khẩu OTP, các phương pháp xác lập và các ứng dụng của OTP. Đây chính là trọng tâm của luận văn. Các kiến thức cơ bản trong chương 2 được tham khảo trong các tài liệu [2, 3, 4, 7] 2.1. Giới thiệu về OTP
2.1.1. Định nghĩa OTP Mật khẩu sử dụng một lần hay còn gọi là OTP (One time password), là mật khẩu chỉ được sử dụng một lần hoặc chỉ có giá trị trong một phiên làm việc.
OTP có thể được sử dụng một lần trong xác thực người dùng cho một phiên làm việc hoặc xác thực một giao dịch của người dùng. OTP thường được sử dụng trong các giao dịch điện tử hoặc các hệ thống xác thực có độ bảo mật cao. Xuất hiện từ đầu thế kỉ 20 và còn có tên gọi khác là Vernam Cipher, OTP được mệnh danh là cái chén thánh của ngành mã hóa dữ liệu. OTP là thuật toán duy nhất chứng minh được về lý thuyết là không thể phá được ngay cả với tài nguyên vô tận (tức là có thể chống lại kiểu tấn công brute-force). Để có thể đạt được mức độ bảo mật của OTP, tất cả những điều kiện sau phải được thỏa mãn: - Độ dài của chìa khóa phải đúng bằng độ dài văn bản cần mã hóa. - Chìa khóa chỉ được dùng một lần. - Chìa khóa phải là một số thực sự ngẫu nhiên. 2.1.2. Ưu điểm OTP có nhiều ưu điểm so với mật khẩu truyền thống. Cụ thể: + An toàn: Giải quyết tốt các vấn đề giả mạo, đánh cắp, Key logger. Đối với phương pháp xác thực hai yếu tố, OTP có thể được kết hợp sử dụng với một mã
PIN hoặc mật khẩu thông thường. + Dễ dàng sử dụng: Việc nhận dạng và xác thực được thực hiện trong vài
giây, tránh được nguy cơ bị lỗi khi gõ các mã OTP dài qua các mã từ một thiết bị
chứng thực vào một máy tính (Ví dụ OTP Token sử dụng màn hình hiển thị). Nó
hoạt động với tài nguyên và đăng nhập được trên hầu hết các nền tảng máy tính và trình duyệt không cần cài đặt phần mềm Client chuyên dụng. + Linh hoạt: Người dùng dễ dàng sử dụng cho các máy tính khác nhau và dễ mang theo thiết bị sinh OTP bên mình. + Mã nguồn mở: Sẵn sàng tích hợp với nhiều ứng dụng mã nguồn mở. Các giải pháp có thể ứng dụng OTP gồm: Web mail server, CRM (Hệ quản lý khách hàng), ERP (Hoạch định nguồn lực doanh nghiệp), Hệ thống quản lý tài
liệu, Thương mại điện tử... 2.1.3. Nhược điểm OTP sẽ mất an toàn khi chủ tài khoản bị mất thiết bị sinh OTP (OTP Token) hay người khác có thể xâm nhập vào hệ thống gửi/nhận tin nhắn SMS để biết được OTP mỗi khi khách hàng thực hiện giao dịch. Ngoài ra, nếu như hệ thống mạng
viễn thông bị chậm, quá tải...hay vì lý do gì đó mà tin nhắn SMS gửi OTP đến chậm thì giao dịch dựa vào OTP chuyển giao qua SMS sẽ không thực hiện được. Hiện nay, do tiết kiệm chi phí đầu tư một số doanh nghiệp chỉ sử dụng hình
thức xác thực qua tên định danh người dùng (username) và mật khẩu dùng một lần (OTP) chuyển giao đến người dùng qua tin nhắn SMS đến điện thoại di động. Tên định danh người dùng dễ dàng bị lộ khi người dùng đăng nhập trên Internet, tham gia các hoạt động trên mạng xã hội hoặc diễn đàn…Còn OTP sẽ mất an toàn khi người dùng bị đánh cắp thẻ SIM điện thoại. 2.2. Ứng dụng của OTP 2.2.1. Ứng dụng trong xác thực Hiện nay, mật khẩu sử dụng một lần thường được sử dụng khá phổ biến trong lĩnh vực ngân hàng nhằm tăng tính bảo mật cho các giao dịch thanh toán như chuyển khoản, chuyển tiền,…Thông thường có hai hình thức xác thực giao dịch mà ngân hàng thường sử dụng, đó là: + Hệ thống sử dụng Token sinh OTP đồng bộ theo thời gian thực: Hệ thống này sử dụng thời gian để đồng bộ việc sinh OTP giữa máy chủ và một thiết bị phần cứng được gọi là OTP Token (mỗi cá nhân sử dụng hệ thống sẽ được cấp một token cá nhân để sinh OTP theo thời gian thực). + Hệ thống không sử dụng Token:
Trong hệ thống này OTP được máy chủ sinh ra tự động cho mỗi phiên giao
dịch và được tồn tại trong một khoảng thời gian xác định và được chuyển tới người
sử dụng thông qua tin nhắn SMS, hay gửi qua Email, … 2.2.2. Ứng dụng trong đăng nhập SSO (Single Sign On - SSO) còn được gọi là ESSO cho phép nhập cùng một id/password để đăng nhập nhiều ứng dụng trong cùng một tổ chức (Enterprise). Ứng dụng trong đăng nhập một lần dựa trên mật khẩu sử dụng một lần được xây dựng nhằm xác thực người sử dụng khi người sử dụng truy cập vào một chuỗi các ứng dụng có liên kết trong môi trường phân tán. Người dùng chỉ cần cung cấp thông tin đăng nhập một lần và có thể truy nhập vào nhiều ứng dụng khác nhau trong hệ
thống phân tán. Như các ứng dụng và các tài nguyên khác nhau hỗ trợ các cơ chế xác thực khác nhau, SSO phải chuyển đổi nội bộ và lưu trữ các thông tin ủy quyền khác nhau để so sánh với những gì đã được sử dụng để xác thực trong lần đầu. Hình 3: Minh họa đăng nhập một lần Lợi ích của việc sử dụng SSO:
+ Đối với người dùng:
- Làm giảm sự mệt mỏi của người dùng khi phải đăng nhập nhiều lần vào các dịch vụ khác nhau; - Làm giảm thời gian nhập lại mật khẩu cho cùng 1 danh tính; - Có thể hỗ trợ các chứng thực thông thường như Windows Credentials (ID/password); - Bảo mật trên tất cả các cấp trong việc truy cập, thoát khỏi hệ thống mà không gây bất tiện cho người sử dụng; - Hệ thống SSO cung cấp cho người dùng công cụ xác thực đăng nhập một
lần. Công cụ này xác thực người dùng đăng nhập vào mọi hệ thống có tích hợp giải
pháp SSO, vì vậy, người dùng chỉ cần nhớ một cặp tên truy cập/mật khẩu duy nhất. + Đối với nhà cung cấp dịch vụ, quản trị hệ thống:
- Người quản trị chỉ cần bảo mật và quản lý thông tin đăng ký của người dùng một lần, vì vậy có thể giảm dung lượng cơ sở dữ liệu và tránh được các xung đột nảy sinh do phải xử lý mật khẩu của các hệ thống khác nhau, tăng khả năng mở rộng và triển khai các chiến lược bảo mật. - Người quản trị có thể thay đổi và cập nhật thông tin được bảo mật của
người dùng khi cần thiết, một cách dễ dàng hơn so với việc thay đổi ở từng hệ thống riêng lẻ mà người dùng đó được phép truy cập. Điều này rất hữu ích khi người dùng thay đổi vị trí của mình với các cấp độ bảo mật khác nhau. Những nhược điểm của SSO:
- Làm tăng các tác động tiêu cực trong trường hợp thông tin có sẵn cho
người khác và được sử dụng sai. Vì vậy khi xây dựng SSO cần tập trung tăng cường bảo vệ thông tin người dùng, do đó nên kết hợp các phương pháp xác thực mạnh, như thẻ thông minh hoặc password dùng một lần. - Yêu cầu về hệ thống xác thực rất quan trọng, chỉ cần hệ thống bị lỗi hoặc ko tiếp cận được với hệ thống, người dùng sẽ không truy cập được vào tất cả các dịch vụ trong hệ thống. Cần đảm bảo việc truy cập được thực hiện mọi lúc và an toàn. Mặc dù có một số nhược điểm, nhưng giải pháp SSO vẫn đang được triển khai rộng rãi ở nhiều nước trên thế giới, trong nhiều hệ thống thông tin có nhu cầu xác thực và bảo mật. Nó được đánh giá là một trong các giải pháp hiệu quả, tiện dụng và kinh tế khi triển khai trên diện rộng. Một số mô hình SSO thực tế:
Các hệ thống xác thực SSO đang được sử dụng rộng rãi là: CAS (Central Authentication Service), WebAuth. RSA Single Sign On Manager, Open Single Sign - On (OpenSSO) hoạt động dựa trên Token, Java Open SSO (JOSSO). + Open SSO Enterprise
OpenSSO là một sản phẩm mã nguồn mở của SUN. Nó là một sản phẩm đơn lẻ, kết hợp các tính năng của Sun Java System. Access Manager, Sun Java System
Federation Manager và Sun System SAML v2 Java Plugin, kiểm soát truy nhập, đảm
bảo an toàn các dịch vụ web và các dịch vụ định danh Web. Khi truy cập vào những
tài nguyên được bảo vệ của người dùng, yêu cầu truy cập cần được xác thực và phải
có đủ quyền truy cập. Khi một người gửi yêu cầu để truy cập tài nguyên được bảo vệ,
policy agent chặn yêu cầu này và kiểm tra. Nếu OpenSSO token được tìm thấy không
hợp lệ, policy agent sẽ yêu cầu máy chủ tiến hành xác thực và cấp phép. Hình 4: Mô hình đăng nhập duy nhất SSO Policy agent là ứng dụng web với nhiệm vụ ngăn tất cả yêu cầu đến ứng dụng, để kiểm tra xem người dùng đã xác thực hay chưa. Hình 5: Cơ chế hoạt động của openSSO Cơ chế hoạt động của OpenSSO như sau: - Từ trình duyệt, người dùng kết nối đến ứng dụng web. - Policy Agent sẽ kiểm tra token có tồn tại trong URL hay không. Nếu token chưa tồn tại thì Policy Agent sẽ chuyển trình duyệt đến OpenSSO máy chủ. - OpenSSO máy chủ xác thực người dùng thông qua trang đăng nhập. Người dùng nhập tên truy cập/mật khẩu để xác thực. - OpenSSO (tạo ra session cho người dùng và kích hoạt nó nếu xác thực thành công). - OpenSSO gửi token cho trình duyệt (trình duyệt sẽ lưu token dưới dạng cookie) và Trình duyệt sẽ gửi token đến cho Agent. - Policy Agent sẽ lấy thông tin token gửi đến OpenSSO máy chủ để kiểm tra. - OpenSSO sẽ gửi thông tin đăng nhập (tên truy cập, mật khẩu) và thông tin vai trò đến Agent nếu kiểm tra token hợp lệ. - Policy Agent sẽ quyết định cho phép truy cập ứng dụng hay không và ghi thông tin session trên URL. + Giải pháp Dịch vụ xác thực trung tâm CAS
CAS (Central Authenticate Service) là một giải pháp SSO mã nguồn mở được phát triển bởi đại học Yale, với các tính năng như sau: - CAS hỗ trợ nhiều thư viện phía máy khách được viết bởi nhiều ngôn ngữ: PHP, Java, PL/SQL. Nó lấy thông tin SSO thông qua cookie. Cookie này sẽ bị hủy khi người dùng đăng xuất khỏi CAS hoặc đóng trình duyệt. Cookie được sinh ra bởi CAS, còn được gọi là TGC (Ticket Granting Cookie) chứa một ID duy nhất. - CAS cung cấp nhiều trình quản lý xác thực (authenticate handler) khác nhau. CAS xác thực nhiều loại thông tin người dùng như tên truy cập/mật khẩu, chứng chỉ khóa công khai X509,... để xác thực những thông tin người dùng khác nhau này, CAS sử dụng những trình quản lý xác thực tương ứng. - CAS cung cấp tính năng “Remember me”. Người phát triển có thể cấu hình
tính năng này trong nhiều file cấu hình khác nhau và khi người dùng chọn
“Remember me” trên khung đăng nhập, thì thông tin đăng nhập sẽ được ghi nhớ với
thời gian được cấu hình. Khi người dùng mở trình duyệt thì CAS sẽ chuyển đến
service URL tương ứng mà không cần hiển thị khung đăng nhập. Nguyên tắc hoạt động của CAS như sau: Chứng thực người dùng với máy chủ CAS - Người dùng nhập tên truy cập/mật khẩu vào khung đăng nhập. Các thông tin này được truyền cho CAS máy chủ thông qua giao thức HTTPS. - Xác thực thành công, TGC được sinh ra và thêm vào trình duyệt dưới hình thức là cookie. TGC này sẽ được sử dụng để đăng nhập với tất cả các ứng dụng Hình 6: Người dùng truy cập vào ứng dụng khi đã chứng thực với CAS máy chủ Truy cập vào ứng dụng của người dùng Trường hợp người dùng truy cập vào ứng dụng khi đã chứng thực với CAS máy chủ: - Người dùng truy xuất ứng dụng thông qua trình duyệt. - Ứng dụng lấy TGC từ trình duyệt và chuyển nó cho CAS máy chủ thông qua giao thức HTTPS. - Nếu TGC này là hợp lệ, CAS máy chủ trả về một Service Ticket (ST) cho trình duyệt, trình duyệt truyền ST vừa nhận cho ứng dụng. - Ứng dụng sử dụng ST nhận được từ trình duyệt và sau đó chuyển nó cho CAS máy chủ. - CAS máy chủ sẽ trả về ID của người dùng cho ứng dụng, mục đích là để thông báo với ứng dụng là người dùng này đã được chứng thực bởi CAS máy chủ. - Ứng dụng đăng nhập cho người dùng và bắt đầu phục vụ người dùng.
Trường hợp người dùng truy cập vào ứng dụng mà chưa chứng thực với CAS máy chủ:
- Người dùng truy xuất ứng dụng thông qua trình duyệt. Vì chưa nhận được TGC nên ứng dụng sẽ chuyển hướng người dùng cho CAS máy chủ. - Người dùng cung cấp tên truy cập/mật khẩu của mình thông qua khung
đăng nhập để CAS xác thực. Thông tin được truyền đi thông qua giao thức HTTPS. - Xác thực thành công, CAS máy chủ sẽ trả về cho trình duyệt đồng thời cả TGC và ST. - Trình duyệt sẽ giữ lại TGC để sử dụng cho các ứng dụng khác (nếu có) và truyền ST cho ứng dụng nêu trên. - Ứng dụng chuyển ST cho CAS máy chủ và nhận về ID của người dùng. - Ứng dụng đăng nhập cho người dùng và bắt đầu phục vụ người dùng. Hình 7: Người dùng truy cập ứng dụng mà chưa chứng thực với CAS 2.3 Giới thiệu về hàm băm mật mã, các thuật toán
2.3.1 Giới thiệu Khái niệm
Hàm băm mật mã là hàm toán học chuyển đổi một thông điệp có độ dài bất kỳ thành một dãy bit có độ dài cố định (tùy thuộc vào thuật toán băm). Dãy bit này được
gọi là thông điệp rút gọn (message digest) hay giá trị băm (hash value), đại diện cho
thông điệp ban đầu. Các hàm băm đóng vai trò cơ bản trong mật mã hiện đại. Mục tiêu của hàm băm (H) tạo ra bản nhận dạng (fingerprit) cho một tập tin, thông điệp hay một khối dữ liệu truyền đi nhằm đảm bảo tính toàn vẹn. Các đặc điểm của hàm băm H
+ H có thể được áp dụng trên khối dữ liệu có độ dài tùy ý + H tạo đầu ra có độ dài cố định + H(x) tính toán đối với mọi x tương đối dễ dàng, tạo điều kiện cho việc cài đặt trên phần cứng lẫn phần mềm được thực hiện một cách dễ dàng + Với bất kì giá trị băm h, không thể tính được x để sao cho H(x)=h. người ta gọi là hàm băm 1 chiều + Với bất kì giá trị x không thể tính được y khác x sao cho H(x)=H(y). Tính chất này được gọi là tính bền xung đột yếu (weak collision resistance) + Không thể tìm được 1 cặp (x, y) để H(x)=H(y). Tinh chất này được gọi là tính bền xung đột mạnh (strong collision resistance) Phân loại hàm băm mật mã Hình 8: Sơ đồ phân loại hàm băm Hàm băm mật mã có khóa
Hàm băm mật mã có khóa là hàm băm có dữ liệu đầu vào ngoài thông điệp ra còn có thông điệp khác là một khóa bí mật, nếu không có khóa bí mật này thì không thể băm thông điệp đầu vào theo đúng yêu cầu. Các hàm băm có khoá được sử dụng để xác thực thông báo và thường được gọi là các thuật toán tạo mã xác thực thông báo (MAC). Hàm băm mật mã không có khóa
Hàm băm không khóa là hàm băm có dữ liệu đầu vào chỉ là thông điệp, không chứa khóa. Hàm băm không khóa có một số tính chất như sau: Tính khó va chạm Tính khó tính toán nghịch ảnh Khó tìm nghịch ảnh thứ hai
Hàm băm không khóa bao gồm các lớp con MDC. Các MDC được sử dụng để tạo ra ảnh đặc trưng của thông điệp, đảm bảo sự toàn vẹn của dữ liệu. 2.3.2. Cấu trúc, vai trò của hàm băm mật mã Cấu trúc của hàm băm mật mã Thành phần chính của một hàm băm là một hàm nén và các hàm biến đổi khác. Hàm nén được thực thi nhiều lần để băm thông điệp ban đầu của hàm băm thành một chuỗi có chiều dài cố định. Các hàm biến đổi khác (có thể có hoặc không) nhận vào
chuỗi bít sau lần cuối cùng thực thi hàm nén và cho kết quả chính là mã băm cuối cùng của hàm băm. Hình 9: Cấu trúc tổng quát của hàm băm Có rất nhiều thuật toán hàm băm cho đến nay sử dụng chung một cấu trúc cơ bản. Cụ thể, một hàm băm thường gồm các bước như sau: Bước 1: Phân chia thông điệp đầu vào chiều dài hữu hạn thành các khối thông điệp con liên tiếp có chiều dài cố định r (giả sử là m, m2, m3, … mk) Bước 2: Do m có độ dài bất kỳ nên luôn có một bước thêm các bit phụ sao cho chiều dài chuỗi mới m’ chia hết cho r (trong các bit thêm thường thêm 64 bit để lưu lại chiều dài ban đầu của chuỗi trước khi chèn). Bước 3: Đưa khối thông điệp con m1, m2, m3,.., mk sẽ lần lượt đi qua một hàm nén f của hàm băm h(m). Bước 4: Kết quả của khối thứ mi-1 sau khi đi qua hàm nén f sẽ là nguồn dữ liệu đầu vào cho bước thứ i tiếp theo. 2.3.3. Một số hàm băm mật mã thông dụng Hàm băm MD4
Hàm MD4 (Message Digest Algorithm 4): Là một hàm băm 128 bit được thiết
kế bởi Ronald Rivest vào năm 1990. Mục tiêu thiết kế của MD4 là để tìm được hai
thông điệp có cùng mã băm thì cần khoảng 264 phép toán và để tìm được tiền ảnh của một mã băm thì cần khoảng 2128 phép toán. Nhưng đến nay mục tiêu đó đã bị thất bại. Xung đột của MD4 có thể tìm thấy với khoảng 220 phép toán. Hàm băm MD5 Được phát triển bởi Ron Rivest tại đại học MIT. Hàm MD5 là một hàm băm độ dài 128 bit. Nó là hàm băm cải tiến của MD4. Đầu vào là những khối 512 bit, được chia cho 16 khối con 32 bit. Đầu ra của thuật toán là một thiết lập của 4 khối
32 bit để tạo thành một hàm băm 128 bit duy nhất. Giải thuật được thực hiện theo 5 bước như sau: Bước 1: Nhồi dữ liệu
+ Nhồi thêm các bits sao cho dữ liệu có độ dài I=n*512 +448 + Việc thực hiện nhồi dữ liệu ngay cả khi dữ liệu ban đầu có độ dài mong
muốn tức là nếu dữ liệu có độ dài 448 thì cũng được nhồi thêm 512 để thu được độ dài 960 bits. + Số lượng các bits nhồi thêm nằm trong khoảng từ 1 đến 512
+ Các bits được nhồi gồm bít 1 và các bits 0 theo sao. Bước 2: Thêm vào độ dài
+ Độ dài của khối dữ liệu ban đầu được biểu diễn dưới dạng nhị phân 64 bit và được thêm vào cuối chuỗi nhị phân kết quả của bước 1 + Nêó đội dài của khối dữ liệu >264, thì chỉ 64 bits thấp nhất được sử dụng nghĩa là giá trị thêm vào bằng K mod 264 + Kết quả có được từ 2 bước đầu là một khối dữ liệu có độ dài là bội số của 512. Khối dữ liệu được biểu diễn Bằng một dãy L khối 512 bit Y0, Y1,…,YL-1 Bằng một dãy N từ 32 bit M0, M1, …, MN-1 Bước 3: Khởi tạo bộ đệm MD (MD buffer)
+ Một bộ đệm 128 bit được dùng để lưu trữ các giá trị băm trung gian và kết quả. Bộ đệm được biểu diễn bằng 4 thanh ghi 32 bit với các giá trị khởi thạo ở dạng little-endian (byte có trọng số nhỏ nhất trong từ nằm ở địa chỉ thấp nhất) như sau: A=67 45 23 01
B=EF CD AB 89
C=98 BA DC FE
D=10 32 54 76 + Các giá trị này tương ứng với các từ 32 bit như sau A=01 23 45 67 B=89 AB CD EF
C=FE DC BA 98 D=76 54 32 10 Bước 4: Xử lý các khối dữ liệu 512 bit
+ Trọng tâm của giải thuật là hàm nén (Compression function) gòm 4 vòng
xử lý, các vòng này có cấu trúc khác nhau nhưng sử dụng các hàm logic khác nhau. Đó là các hàm + Mảng 64 phần từ được tính theo công thức T(i)=232xabs(sin(i)) theo radian
+ Kết quả của 4 vòng được cộng vào theo modulo 232 với đầu vào CVq để tạo ra CVq+1 Bước 5: Xuất kết quả
Sau khi xử lý hết L khối 512 bit, đầu ra của lần xử lý thứ L là giá trị băm 128 bits Giải thuật MD5 được tóm tắt như sau
+ CV0=IV
+ CVq+1=Sum32[CVq,RFI(Yq,RFH(Yq,RFG(Yq,RFF(Yq,CVq))))]
Trong đó IV là bộ đệm gồm 4 thanh ghi ABCD Yq là khối dữ liệu thứ q gồm 512 bits L là số khối 512 bit sau khi nhồi dữ liệu CVq là đầu ra của khối thứ q sau khi áp dụng hàm nén RFx là hàm luận lý sử dụng trong các vòng (F,G,H,I) MD là giá trị băm (message digest)
Sum32 là hàm cộng modulo 232
Họ hàm băm SHA
+ Đặc điểm
Thuật toán SHA Secure Hash Algorithm là thuật toán băm mật được phát
triển bởi cục an ninh quốc gia Mỹ (NSA: National Security Agency) và được xuất bản thành chuẩn của chính phủ Mỹ bởi viện công nghệ và chuẩn quốc gia Mỹ
(NIST: National Institute of Standards and Technology). Họ hàm băm SHA bao gồm 5 thuật toán băm an toàn là: SHA-1 (trả lại kết quả dài 160 bit), SHA-224 (trả lại kết quả dài 224 bit), SHA-256 ( trả lại kết quả dài 256 bit), SHA-384 và SHA- 512 ( trả lại kết quả dài 512 bit). Bốn thuật giải sau thường được gọi chung là SHA- 2. Bảng dưới đây thể hiện các tính chất cơ bản của bốn thuật toán băm an toàn. + Nhận xét về họ hàm băm SHA Ưu điểm Nhược điểm Hiện nay, SHA-1 không còn được coi là an toàn bởi đầu năm 2005, ba nhà SHA là họ hàm băm được coi là an
toàn bởi: mật mã học người Trung Quốc đã + Cho một giá trị băm nhất định được tạo phát triển thành công một thuật toán nên bởi một trong những thuật giải SHA, dùng để tìm được hai đoạn dữ liệu việc tìm lại được đoạn dữ liệu gốc là nhất định có cùng kết quả băm tạo ra không khả thi. bởi SHA-1. Mặc dù chưa có ai làm được điều tương tự với SHA-2, nhưng + Việc tìm được hai đoạn dữ liệu nhất
định có cùng kết quả băm tạo ra bởi vì về thuật toán, SHA-2 không khác một trong những thuật giải SHA là biệt mấy so với SHA-1 nên nhiều nhà
khoa học đã bắt đầu phát triển một
thuật toán khác tốt hơn SHA. NIST
cũng đã khởi đầu một cuộc thi phát triển thuật toán băm mới an toàn hơn
SHA, giống như quy trình phát triển không khả thi. Bất cứ thay đổi nào trên
đoạn dữ liệu gốc, dù nhỏ, cũng sẽ tạo
nên một giá trị băm hoàn toàn khác với
xác suất rất cao.SHA - 1 được sử dụng
rộng rãi trong nhiều ứng dụngvà giao
thức an ninh khác nhau. SHA - 1 được chuẩn mã hóa nâng cao AES. coi là thuật giải thay thế cho MD5, một
thuật giải băm 128 bit khác Thuật toán mã hóa SHA-1 Giới thiệu chung:
SHA-1 là một thuật toán được sử dụng rộng rãi trong nhiều ứng dụng và giao
thức an ninh khác nhau, bao gồm TLS và SSL, PGP, SSH, S/MIME và IPSec. SHA-1 được coi là giải thuật thay thế MD5. Ba thuật toán SHA có cấu trúc khác nhau và được phân biệt là: SHA-0, SHA-1, và SHA-2. SHA-1 gần tương tự như SHA-0, nhưng sửa chữa một lỗi trong các đặc tả kỹ thuật gốc của hàm băm SHA
dẫn đến những điểm yếu quan trọng. Các thuật toán SHA-0 đã không được sử dụng trong nhiều ứng dụng. SHA-2 mặt khác có những điểm khác biệt quan trong so với
hàm băm SHA-1. Việc phân loại các hàm băm SHA được đưa ra trong bảng sau đây: Kích Kích thước Kích Kích Xung Các va chạm Thuật toán thước tin nhắn thước thước quanh tìm thấy? đầu ra tối đa từ SHA-0 Có 160 512 264 − 1 32 80 SHA-1 Tấn công lí
thuyết? SHA- 224/256 512 264 − 1 32 64 224/256 SHA-2 Không SHA- 384/512 1024 2128 − 1 64 80 384/512 SHA-1 là 1 phần trong các ứng dụng bảo mật được sử dụng rộng rãi trong các giao thức như: TLS và SSL, PGP, SSH và IPSEC. Các SHA-1 có thể được sử dụng với các DSA trong thư điện tử, chuyển tiền điện tử, phân phối phần mềm, lưu trữ dữ
liệu và các ứng dụng khác cần đảm bảo tính toàn vẹn DL và xác thực nguồn gốc
DL. Các SHA-1 cũng có thể sử dụng bất cứ khi nào nó là cần thiết để tạo ra 1 phiên
bản đặc biệt của tin nhắn. Hàm SHA-1 còn được sử dụng trên Wii của Nintendo để
xác minh chữ ký thời gian khởi động. SHA-1 và SHA-2 là những thuật toán băm an toàn theo yêu cầu của pháp luật để sử dụng trong một số ứng dụng của Chính Phủ Hoa Kỳ, bao gồm cả sử dụng trong
các thuật toán mã hóa khác và các giao thức, để bảo vệ thông tin mật nhạy cảm. Sau đây là các bước tiến hành trong thuật toán SHA-1
Input: thông điệp với độ dài tối đa 264 bits
Output: giá trị băm (message digest) có độ dài 160 bits
Giải thuật gồm 5 bước thao tác trên các khối 512 bits Bước 1: Nhồi dữ liệu Thông điệp được nhồi thêm các bit thỏa mãn các yêu cầu: + Độ dài L mod 512 luôn đồng dư là 448 hay I=n*512+448. + Việc thực hiện nhồi dữ liệu ngay cả khi dữ liệu ban đầu có độ dài mong
muốn tức là nếu dữ liệu có độ dài 448 thì cũng được nhồi thêm 512 để thu được độ dài 960 bits. + Số bit nhồi thêm phải nằm trong khoảng [1-512].
+ Phần thêm vào cuối dữ liệu gồm 1 bit 1 và theo sau là các bit 0. Bước 2: Thêm độ dài + Độ dài của khối dữ liệu ban đầu sẽ được biểu diễn dưới dạng nhị phân 64 bit và được thêm vào cuối chuỗi nhị phân mà ta thu được của bước 1. + Kết quả thu được từ bước 2 là 1 khối dữ liệu có độ dài là bội số của 512 (với cứ 512 bit là 1 khối dữ liệu). Khối dữ liệu được biểu diễn Bằng một đãy L khối 512 bit Y0, Y1, YL-1 Bằng một dãy N từ 32 bit M0, M1, … MN-1
Bước 3: Khởi tạo bộ đệm MD Một bộ đệm 160-bit được dùng lưu trữ các giá trị băm trung gian và kết quả.
Bộ đệm được biểu diễn bằng 5 thanh ghi 32-bit với các giá trị khởi tạo ở dạng big- endian (byte có trọng số lớn nhất trong từ nằm ở địa chỉ thấp nhất) và có 2 bộ đệm 5 thanh ghi của bộ đệm đầu tiên được đánh đặt tên là A, B, C, D, E và tương tự cho
bộ đệm thứ 2 là H0, H1, H2, H3, H4. Có giá trị như sau (theo dạng Hex): H0=67452301
H1=EFCDAB89
H2=98BADCFE
H3=10325476
H4=C3D2E1F0. Bước 4: Xử lý các khối dữ liệu 512 bit + Được thực hiện gồm 4 vòng lặp thực hiện tất cả 80 bước, 4 vòng lặp có cấu
trúc như nhau, chỉ khác nhau ở các hàm logic ft. Thuật toán được thực hiện theo các
bước mô tả trong bảng sau: Bước Hàm Giá trị (0 ≤ t ≤ 19) (B AND C) OR ((NOT B) AND D) ft = f(B,C,D) (20 ≤ t ≤ 39) B XOR C XOR D ft = f(B,C,D) (40 ≤ t ≤ 59) (B AND C) OR (B AND D) OR (C AND D) ft = f(B,C,D) (60 ≤ t ≤ 79) B XOR C XOR D ft = f(B,C,D) + Mỗi vòng có đầu vào gồm khối 512-bit hiện thời và một bộ đệm 160-bit A,B,C,D,E. Các thao tác sẽ cập nhật giá trị bộ đệm . + Chia khối dữ liệu đã nhồi thêm (cuối bước 2) thành 16 nhóm (mỗi nhóm gồm 32 bit) và đặt theo thứ tự là: W0, W1,..., W15. + Mở rộng từ 16 nhóm 32 bit lên 80 nhóm 32 bit bằng vòng lặp: For t = 16 to 79 let
Wt = S1(Wt-3 XOR Wt-8 XOR Wt- 14 XOR Wt-16).
+ Gán A = H0, B = H1, C = H2, D = H3, E = H4.
+ Mỗi vòng lập sử dụng theo công thức chung với một hằng số Kt (0 ≤ t ≤ 79) như sau: For t = 0 to 79 do
TEMP = S5(A) + ft (B, C, D) + E + Wt + Kt;
E = D; D = C; C = S30(B); B = A; A = TEMP; Với: Kt = 5A827999 (0 ≤ t ≤ 19)
Kt = 6ED9EBA1 (20 ≤ t ≤ 39)
Kt = 8F1BBCDC (40 ≤ t ≤ 59)
Kt = CA62C1D6 (60 ≤ t ≤ 79) + Đầu ra của 4 vòng (bước 80) được cộng với giá trị của bộ đệm để tạo ra 1 chuỗi kết quả dài 160 bit.
H0 = H0 + A
H1 = H1 + B H2 = H2 + C
H3 = H3 + D
H4 = H4 + E. Bước 5: Xuất kết quả Sau khi thao tác trên toàn bộ N khối dữ liệu (blocks). Kết quả của khối thứ N là chuỗi băm 160-bit H=H0 H1 H2 H3 H4 Giải thuật SHA-1 được tóm tắt như sau
+ CV0=IV + CVq+1=Sum32(CVq,ABCDEq) Trong đó
- IV là giá trị khởi tạo của bộ đệm ABCDE
- ABCDEq là đầu ra của hàm nén trên khối thứ q
- L là số khối thông điệp 512 bit
- Sum32 là phép công modulo 232 trên từng từ của đầu vào
- MD là giá trị của hàm băm 2.3.4. Các ứng dụng cơ bản của hàm băm + Tạo khóa bí mật từ mật khẩu (Key Stretching) + Kiểm tra tính toàn vẹn dữ liệu (Integrity checking) + Mã chứng thực thông điệp sử dụng hàm băm (HMAC - Hashed Message Authencation Code) + Chữ kí điện tử 2.4 Một số phương pháp sinh OTP 2.4.1. Phương pháp sinh theo thời gian Theo phương pháp sinh OTP theo thời gian, người dùng sẽ được cấp một thiết bị sinh mã được gọi là token. Token gồm có ba thành phần chính: một mã
seedcode, một đồng hồ đếm thời gian, và một thuật toán mã hóa một chiều. Mã
seedcode là mã được nhà sản xuất cài đặt sẵn trong token. Mỗi token có một mã
seedcode khác nhau. Và mã seedcode này cũng được lưu lại trong hệ thống của nhà
cung cấp dịch vụ tương ứng với tên truy nhập của người dùng. Đồng hồ đếm thời
gian là đồng hồ của token, nó được đồng bộ với đồng hồ của hệ thống trước khi giao cho người dùng. Mỗi khi người dùng bấm nút sinh mã, token sẽ lấy biến thời gian của đồng hồ. Biến thời gian được lấy chi tiết đến từng phút, hoặc 30 giây. Thuật toán mã hóa được sử dụng là thuật toán băm SHA-1. Thuật toán Time-based One-Time Password (TOTP) là một ví dụ cụ thể của những giải thuật sinh mật khẩu một lần dựa trên thời gian như vậy. Sau đây sẽ là phần mô tả thuật toán này. Bước 1: Thiết lập
- Đưa ra một số nguyên bí mật K được chia sẻ giữa bên xác thực và người sử dụng. - Thống nhất một giá trị bước nhảy thời gian X và thời gian ban đầu T0. Bước 2: Xác thực ]. - Người sử dụng tính giá trị 𝑇=[ Current Time - To
X - Người sử dụng gửi cho bên xác thực HOTP(K,T) trong đó HOTP là thuật toán sinh OTP dựa trên các hàm băm. Bên xác thực có thể xác nhận mật khẩu đó hợp lệ hay không, vì bất kỳ mật khẩu nào được sinh ra bên ngoài khoảng thời gian từ T0 đến thời gian hiện tại đều khác nhau. Và vì có một khóa được dùng chung nên nhà xác thực có thể chắc chắn rằng mật khẩu được sinh ra bởi một người đang sở hữu khóa chia sẻ đó. Hình 10: Mô hình sinh mã OTP theo thời gian. 2.4.2. Phương pháp sinh theo thuật toán OTP sinh ra bằng thuật toán dựa trên mật khẩu cũ không có giá trị thay đổi
theo thời gian, mà chúng được sinh ra theo thuật toán mỗi khi có yêu cầu sử dụng. Thuật toán của bên xác thực và người dùng phải đồng bộ với nhau. Mỗi lần một người dùng được xác thực thành công, bên xác thực sẽ chỉ chấp nhận một OTP kế tiếp được sinh ra bởi thuật toán. Không giống OTP dựa trên thời gian, OTP dựa trên toán học chỉ có giá trị cho một lần sử dụng và không bị tấn công như đã mô tả ở trên khi mà mật khẩu được sử dụng nhiều lần trong một khoảng thời gian. Và việc đồng bộ hóa đồng hồ và sai số đồng hồ không phải là vấn đề. Một vấn đề khi cài đặt các giải thuật này là việc giữ cho thuật toán của bên xác thực và người dùng đồng bộ với nhau. Đa số các cài đặt cho phép bên xác thực chấp nhận một cửa sổ các mật khẩu và điều chỉnh cửa sổ này dựa trên mật khẩu hợp lệ cuối cùng được nhập vào. S/Key và Hash-based OTP (HOTP) là hai dạng phổ biến của bộ sinh mật khẩu dựa trên các thuật toán. Phương pháp này sinh OTP trên cơ sở các OTP đã sử dụng trước đó của người dùng. Một ví dụ cho thuật toán này là thuật toán của Leslie Lamport - thuật toán sử dụng các hàm một chiều f. Hệ thống OTP làm việc dựa trên một giá trị khởi
tạo ban đầu s để sinh mật khẩu lần đầu tiên. Mật khẩu OTP được sử dụng cho phiên làm việc đầu tiên sẽ được tính như sau:
OTP1 = fn(s). Trong đó: fn(s) = f(fn-1(s)) - với n là số lần áp dụng hàm f lên giá trị ban đầu s.
Khi đó ta sẽ có lần lượt các mật khẩu OTP cho các phiên như ở bảng dưới đây. Phiên 1 Phiên 2 Phiên 3 Phiên 4 OTP1 = fn(s) OTP2 = fn-1(s) OTP3 = fn-2(s) OTP4= fn-3(s) Nếu một người tấn công nào đó có thể bắt được giá trị OTP của một phiên
làm việc nào đó thì người đó có thể dùng để đăng nhập vào hệ thống khi mà giá trị OTP này còn hợp lệ, tuy nhiên khi OTP không còn hợp lệ nữa thì không thể thực hiện việc đăng nhập nữa và để lấy được giá trị OTP cho lần đăng nhập kế tiếp thì người tấn công sẽ phải đối mặt với việc tính hàm f ngược. Do hàm f đã được chọn là hàm một chiều nên việc này là cực kì khó để thực hiện. Nếu hàm f là một hàm
băm mật mã thì việc tính toán là cực kì khó khăn thậm chí là không thể. SMS cũng có thể được dùng làm phương tiện sinh OTP như khóa hai. Có hai dạng khóa SMS: + Phương thức SMS tức thời:
Trong phương pháp này, trước tiên người dùng thực hiện đăng nhập với password như bình thường, nếu thành công máy chủ xác thực sẽ sinh OTP và gửi ngay SMS cho người dùng để hoàn tất khóa xác thực thứ hai. Giao thức SMS không bảo đảm gửi tin thành công hay gửi kịp thời. Điều này có thể làm giảm tính khả dụng của việc xác thực hai khóa dựa trên SMS. + Phương thức khóa SMS lô:
Trong phương thức này, người dùng nhận một danh sách mã số trước khi đăng nhập. Mỗi mã số gắn với một ký tự hay số dòng. Người dùng cần nhập vào mã số tương ứng với dòng yêu cầu để làm khóa xác thực thứ hai. SMS lô có thể giảm đáng kể chi phí SMS và khắc phục được vấn đề chất lượng dịch vụ của giao thức SMS vì danh sách được gửi đến người dùng trước khi họ thực sự cần đến. Tuy
nhiên khuyết điểm của SMS lô là khả năng bị tấn công lớn hơn. 2.4.3. Phương pháp sinh theo giải pháp S/KEY S/Key còn được gọi là Lamport scheme, là một giải pháp phổ biến được phát
triển để xác thực các ứng dụng đầu cuối trên các hệ điều hành thuộc họ Unix. Việc sinh mật khẩu dựa trên hàm băm. Mật khẩu thực sự của người dùng được kết hợp với một thiết bị offline chứa một tập ngắn các kí tự và một bộ đếm giảm dần để tạo ra một mật khẩu. Vì mỗi mật khẩu chỉ được sử dụng một lần nên chúng vô dụng với những người tấn công mật khẩu. Vì tập các kí tự không thay đổi cho đến khi bộ đếm giảm về 0, nên có thể chuẩn bị một danh sách mật khẩu dùng một lần mà người dùng có thể mang theo. Nói một cách khác, người dùng có thể đưa ra mật khẩu, các kí tự, và giá trị bộ đếm mong muốn cho một máy tính cục bộ để tạo ra mật khẩu dùng một lần phù hợp, sau đó có thể truyền mật khẩu này trên mạng. S/Key được hỗ trợ trong các hệ điều hành Linux, OpenBSD, NetBSD, và FreeBSD. Một ứng dụng mã nguồn mở chung, như ứng dụng OPIE có thể được dùng để hỗ trợ việc sử dụng S/Key trên các hệ thống khác. S/Key là thương hiệu của công ty Telcordia Technologies . Sau đây là phần mô tả cụ thể cho phương pháp này:
Bước 1: Sinh mật khẩu.
+ Bước này bắt đầu với một khóa bí mật W. Khóa này có thể được đưa ra bởi
người dùng hoặc máy tính của server sinh ra và không được gửi cho client. Nếu
khóa này bị lộ thì tính bảo mật của S/Key sẽ bị giảm. + Một hàm băm mã hóa H được áp dụng n lần cho khóa bí mật W, cách này tạo ra một chuỗi băm của n mật khẩu dùng một lần. Mật khẩu là kết quả của việc áp dụng hàm băm mã hóa: H(W), H(H(W)),…, Hn(W). + Mật khẩu ban đầu W bị hủy đi. + Người dùng (client) được cung cấp n mật khẩu dùng một lần, được in ra theo thứ tự ngược lại: Hn(W), Hn-1(W) ,..., H(H(W)), H(W). + Những mật khẩu H(W), H(H(W)),…, Hn-1(W) không được lưu lại ở server mà server chỉ lưu mật khẩu Hn(W). Bước 2: Xác thực
Sau quá trình sinh mật khẩu người dùng có một danh sách các mật khẩu. Mật khẩu đầu tiên cũng là mật khẩu server đang lưu. Mật khẩu này sẽ không được dùng để xác thực, và mật khẩu thứ hai sẽ được dùng: + Người dùng cung cấp cho server mật khẩu pwd thứ hai trong danh sách của mình và gạch bỏ nó đi. + Server tính H(pwd) trong đó pwd là mật khẩu được cung cấp. Nếu H(pwd)
là mật khẩu đầu tiên (server đang lưu) thì quá trình xác thực thành công. Server sẽ tính H (mật khẩu i) và so sánh kết quả với mật khẩu i-1, được lưu trên server. Tính bảo mật
Tính bảo mật của S/Key phụ thuộc vào độ phức tạp của hàm băm mã hóa. Giả sử rằng một người tấn công giữ một mật khẩu đã được dùng cho một lần xác thực thành công. Gọi mật khẩu này là i, mật khẩu này đã không còn giá trị trong quá trình xác thực nữa vì mỗi mật khẩu chỉ được dùng một lần. Nhưng người tấn công sẽ quan tâm đến việc tìm ra mật khẩu i-1, vì mật khẩu này sẽ được sử dụng cho lần xác thực kế tiếp. Điều này cần phải chuyển ngược hàm băm để tạo ra mật khẩu i-1 từ mật khẩu i (H(mật khẩu i-1)=mật khẩu i) một việc rất khó khăn với các hàm băm mã hóa hiện thời. Tuy nhiên S/Key có thể bị tấn công kiểu người đứng giữa (man-in- the middle). S/Key sử dụng các số 64 bit, và để cho người dùng sử dụng, mỗi số được ánh xạ thành 6 từ ngắn, mỗi từ có từ 1 đến 4 kí tự lấy từ từ điển 2048 từ. Ví dụ một số
64 bit có thể được biểu diễn thành Roy Hurt Ski Fail Grim. 2.4.4. Phương pháp sinh sử dụng HOTP HOTP được sử dụng dựa trên các mã xác thực thông điệp bằng hàm băm
(Hash-based Message Authentication Code - HMAC) và hàm băm SHA-1 (Secure
Hash Algorithm 1) thường được sử dụng. HOTP được đưa ra bởi tổ chức Initiative
for Open Authentication (OATH). Về mặt khái niệm, HOTP tính giá trị băm SHA-1 dựa trên HMAC được mã khóa bởi một khóa bí mật được chia sẻ trên một bộ đếm.
Những bước tính toán để sinh ra một mật khẩu HOTP như sau:
- Hai bên người dùng đưa ra khóa bí mật dùng chung S. - Khởi tạo bộ đếm c = 0. - Định nghĩa H là HMAC được tính toán bằng SHA-1. - Đặt Truncate là hàm lựa chọn 4 byte theo một cách nào đó.
- Người dùng cần xác thực gửi giá trị Truncate(H(S,c)) & 0x7FFFFFFF cho server. - Bên server cũng tính toán giá trị hàm Truncate() theo cách tương tự. Nếu giá trịxác thực do server tính toán khớp với giá trị người dùng cung cấp thì người dùng được xác thực. - Cả hai bên tăng giá trị của c.
Với hệ thống S/Key, kết quả thường quá dài để người sử dụng nhập vào thiết bị. Thay vì chuyển kết quả thành chuỗi kí tự như S/Key, HOTP đơn giản chỉ tính ra giá trị như sau: Value = HOTP(K,C) mod 10d Trong đó:
- K là một khóa bí mật; C là bộ đếm;
- d là số chữ số mong muốn của kết quả.
Có nhiều hệ thống ứng dụng phương pháp HOTP đã được phát triển và triển khai. Một hệ thống có thể thay thế HMAC bằng giải thuật mã hóa Data Encryption Standard (DES), Advanced Encryption Algorithm (AES), hoặc bất kì một giải thuật mã hóa khác. Time-based One Time Password (TOTP) là phương pháp thay thế bộ đếm c bằng thời gian hiện tại, do đó nó chuyển HOTP dựa trên toán học thành OTP dựa trên thời gian. 2.4.5. Phương pháp sinh sử dụng Security token Security token hay thường gọi là OTP Token, là loại khóa hai chiều được dùng phổ biến nhất hiện nay vì giá thành rẻ và dễ dùng. Sau khi người dùng gõ vào và đăng nhập thành công thì mật khẩu này hết hiệu lực (lần đăng nhập sau sẽ dùng mật khẩu khác). Hình 11: Thiết bị sinh OTP - OTP Token Dựa trên thuật toán sinh OTP, thiết bị OTP có 2 dạng: đồng bộ thời gian và dùng bộ đếm. + Loại thiết bị OTP đồng bộ thời gian
Thiết bị sẽ tạo ra mã số khó đoán (mật mã hay khóa) dựa vào đồng hồ trong và mã số này được xác thực với điều kiện đồng hồ trong của thiết bị OTP đồng bộ với máy chủ xác thực. Do sự xê dịch của đồng hồ, việc đồng bộ tuyệt đối thời gian giữa thiết bị OTP và máy chủ là không thể nên máy chủ xác thực phải chấp nhận các khóa có sự sai lệch đôi chút. + Loại thiết bị OTP dùng bộ đếm Thiết bị này tăng bộ đếm mỗi khi sinh ra một khóa mới và khóa này được xác thực với điều kiện bộ đếm trong của thiết bị OTP đồng bộ với máy chủ xác
thực. Khác với bộ đếm trong của thiết bị OTP, bộ đếm của máy chủ được điều chỉnh với mỗi xác thực thành công. Với loại này, thiết bị OTP và máy chủ xác thực dễ bị “mất đồng bộ”. So với thiết bị OTP đồng bộ thời gian, thiết bị OTP dùng bộ đếm kém an toàn hơn trong việc chống lại kiểu tấn công thụ động online và offline. Người tấn công có thể thực hiện tấn công kiểu giả mạo (phishing) và thu thập nhiều khóa để dùng sau đó, hay ai đó lấy được thiết bị này có thể tạo sẵn các khóa mà không hành động ngay. Một biến thể của thiết bị OTP đó là dùng phần mềm giả lập thiết bị phần cứng, cài trên các thiết bị di động như PDA hay điện thoại di động (ĐTDĐ). Hình 12: Ứng dụng Mobile OTP - IOS Đây là giải pháp hiệu quả và ít tốn kém, ít nhất cho đến khi các thiết bị di động trở nên dễ bị can thiệp như máy tính và người ta cũng phải cài đặt firewall, trình chống virus, công cụ lọc spam... trên các thiết bị này. Hình 13: Ứng dụng Mobile OTP - Window Phone 8 Thiết bị OTP mềm trên thiết bị di động có thêm mã PIN bảo vệ gần đạt được độ an toàn như thiết bị OTP phần cứng. Tuy giảm được chi phí phần cứng (thiết bị di động có sẵn) và chi phí phân phối trực tiếp nhưng khi triển khai đại trà có thể phải đối mặt với khó khăn về tính tương thích trong việc cài đặt và vận hành phần mềm do chủng loại điện thoại di động rất đa dạng về phần cứng và nền tảng phần mềm cũng không thống nhất. 2.4.6. Phương pháp sinh bằng giao thức Giao thức thử thách và trả lời (Challenge - Response) cho phép người truy nhập tự xác thực mình với hệ thống bằng cách chứng minh hiểu biết của mình về giá trị mật mã bí mật mà không yêu cầu người truy nhập tiết lộ giá trị bí mật. Hệ thống xác thực đưa ra cho người truy nhập một số được tạo ra một cách ngẫu nhiên được gọi là thử thách (challenge). Người truy nhập nhập số thử thách và giá trị bí mật để hàm mật mã tính ra
câu trả lời. Hệ thống xác thực thông tin nhận dạng người truy nhập thành công nếu câu
trả lời là giá trị mong đợi. Do thử thách là một số ngẫu nhiên, nên giao thức thử thách- trả
lời cung cấp một lá chắn có hiệu quả chống lại dạng tấn công phát lại. Hình 14: Mô hình xác thực người dùng dựa trên giao thức Thách thức - Trả lời Xác thực không mật mã nói chung thích hợp trong những ngày trước khi có
Internet, khi người dùng có thể chắc chắn rằng hệ thống yêu cầu mật khẩu đã thực sự là hệ thống mà họ đang cố gắng để truy cập, và không ai có khả năng nghe trộm trên các đường truyền để lấy các mật khẩu được nhập vào. Để giải quyết vấn đề này chúng ta cần phải có một cách tiếp cận khác phức tạp hơn. Nhiều giải pháp liên quan đến mật mã xác thực hai chiều, trong đó cả người sử dụng và hệ thống phải dùng một phương pháp thuyết phục khác mà họ biết có thể chia sẻ bí mật (mật khẩu), mà không bao giờ bí mật này được truyền đi một cách rõ ràng trên các đường truyền. Một trong những phương pháp được thực hiện liên quan đến việc sử dụng mật khẩu đó là một bên mã hóa một số thông tin ngẫu nhiên nhằm tạo ra các thách thức (challenge), sau đó, đầu kia phải hồi đáp lại một trả lời (response) một giá trị tương tự như mã hóa là một số chức năng được xác định trước các thông tin ban đầu được cung cấp, do đó chứng minh rằng nó đã có thể giải mã các thử thách. Ví dụ, trong hệ Kerberos thách thức là một số nguyên mã hóa N, trong khi
trả lời là số nguyên mã hóa N + 1, chứng minh rằng bên kia đã có thể giải mã các số
nguyên N. Trong các biến thể khác, một hàm băm hoạt động trên một mật khẩu và
một giá trị thách thức ngẫu nhiên để tạo ra một giá trị mới. Việc trao đổi các giá trị được mã hóa hoặc giá trị băm đó không trực tiếp tiết lộ mật khẩu để người tấn công có thể đánh cắp được. Tuy nhiên, các trao đổi thể
cung cấp đủ thông tin cho phép một người tấn công suy ra mật khẩu là gì, sử dụng
một cuộc tấn công dựa trên từ điển hoặc kiểu vét cạn. Việc sử dụng các thông tin được tạo ra ngẫu nhiên trên mỗi sàn chứng khoán có thể bảo vệ chống lại khả năng bị tấn công phát lại (replay attack). 2.5. Các phương pháp chuyển giao OTP 2.5.1. Chuyển giao OTP bằng giấy Trong một số trường hợp, mật khẩu OTP cũng được in ra giấy, với mỗi giao dịch trực tuyến, người dùng được yêu cầu nhập một giá trị OTP cụ thể từ danh sách đã in sẵn. Hình 15: Thẻ mật khẩu OTP với mật khẩu in sẵn của VinaGame Nhằm bảo vệ người chơi trước nạn trộm cắp tài khoản, vật phẩm trong game, công ty VinaGame đã đưa ra giải pháp mật khẩu sử dụng 1 lần (One Time Password - OTP) áp dụng trên game "Võ lâm truyền kỳ" do công ty cung cấp. Trên mỗi thẻ người ta in sẵn 48 mật khẩu OTP theo cách ngẫu nhiên. Việc đăng nhập các tài khoản mà người sử dụng đã đăng kí tại website của nhà cung cấp dịch vụ, chỉ được
thực hiện thành công bằng các mật khẩu này. Khi thoát khỏi game, mật khẩu vừa được sử dụng sẽ tự huỷ sau 1 đến 5 phút do người chơi định sẵn. Tuy vậy phương pháp này vẫn có hạn chế khi người tấn công đánh cắp thẻ và có thể xâm nhập vào tài khoản của khách hàng. 2.5.2. Chuyển giao OTP bằng tin nhắn SMS Một công nghệ phổ biến thường được sử dụng cho việc cung cấp các OTP là
tin nhắn văn bản. Từ các hệ thống xác thực tin nhắn SMS, một mật khẩu OTP được
sinh và gửi thông qua một tin nhắn văn bản đến điện thoại di động của người dùng. Tương tự như với thẻ bảo mật, người dùng phải nhập OTP đã nhận được nhập vào giao diện đăng nhập nhằm xác minh tính chính xác và khẳng định đủ an toàn để truy nhập hệ thống dịch vụ hoặc ứng dụng. Phương pháp này là một trong các phương pháp thông dụng nhất mà các ngân hàng thường sử dụng. Đầu tiên, khách hàng đăng ký dịch vụ cùng với số điện thoại cho ngân hàng. Khi thực hiện giao dịch, khách hàng nhập thông tin thanh
toán, máy chủ của ngân hàng sẽ tạo OTP và gửi cho khách hàng thông qua một tổng đài bằng tin nhắn SMS. Sau khi khách hàng nhận được tin nhắn chứa OTP, khách hàng sẽ phải nhập OTP vào để máy chủ xác thực. Máy chủ kiểm tra OTP, nếu đúng và trong thời gian hợp lệ thì sẽ thực hiện giao dịch, nếu không sẽ có báo lỗi. Hình 16: Chuyển giao OTP bằng tin nhắn SMS Ưu điểm của phương pháp chuyển giao OTP bằng tin nhắn SMS là tin nhắn văn bản là một kênh truyền thông phổ biến, có sẵn trong gần như tất cả các thiết bị cầm tay với lượng người sử dụng khá lớn. Đây cũng là một lợi thế so sánh lớn của loại công cụ này so với việc sử dụng các loại thiết bị phân phối OTP khác. Trên thực tế thì loại công cụ này có nhiều tiềm năng để phổ biến tới nhiều người tiêu dùng với tổng chi phí thấp. Tất nhiên cũng với một số trường hợp khác thì giá của mỗi tin nhắn thường xuyên cho mỗi một OTP không hẳn đã phù hợp. Cách thức gửi nhận OTP qua tin nhắn văn bản cũng đã bộc lộ một số vấn đề, đó là nó không được bảo vệ cần thiết để chống lại các cuộc tấn công mà sự tinh vi đang ngày càng gia tăng. Các tin nhắn có thể được mã hóa bằng cách sử dụng một
số tiêu chuẩn như A5/x, điều mà theo báo cáo của một số nhóm người tấn công có
thể giải mã trong vòng vài phút hoặc vài giây, hoặc nó không được mã hoá bởi
những nhà cung cấp dịch vụ khi nhận và gửi đi tới tất cả. Ngoài các mối đe doạ từ
người tấn công, các nhà mạng điện thoại di động cũng là một thành phần trong việc đảm bảo sự tin cậy. Ví dụ trong trường hợp chuyển vùng, qua nhiều hơn một nhà mạng điện thoại di động đơn lẻ rất cần phải tạo được sự tin tưởng. Vì bất cứ ai đánh cắp được thông tin này, đều có thể gắn kết với những người tấn công, chẳng hạn như các cuộc tấn công “man- in- the- middle”. Giải pháp cho vấn đề là xác thực “Out of Band”, trong đó sử dụng một kênh riêng biệt cho yếu tố xác thực thứ hai, đang trở thành một thực tiễn tốt nhất cho vấn đề xác thực hai yếu tố. 2.5.3. Tạo OTP sử dụng token Token là một thiết bị dùng để xác thực người dùng thay cho cơ chế ID/Username và mật khẩu đăng nhập. Mỗi thiết bị token đều phân biệt nhau và được nhà cung cấp dịch vụ gán với một người dùng cụ thể. OTP có thể được sinh trên token. Thiết bị token hoạt động theo phương thức tự tạo các dãy số ngẫu nhiên (OTP) và có giá trị chỉ trong một khoảng thời gian nhất định (thường dưới 1 phút).
Chẳng hạn, khi người dùng muốn đăng nhập vào trang web ngân hàng - nơi đã cung cấp thiết bị token, để thực hiện giao dịch, người dùng phải nhập dãy số OTP trên thiết bị token vào ô mật khẩu thì mới được truy cập. Nếu sau thời gian qui định trên
thiết bị token, OTP này sẽ không còn giá trị, và nếu người dùng vẫn chưa đăng nhập hay hoàn tất giao dịch thì họ phải nhấn nút hay thiết bị token sẽ tự động tạo ra OTP mới và người dùng nhập OTP mới này để đăng nhập hay hoàn tất giao dịch. Thiết bị Token gồm 2 loại chính: thẻ EMV và E-Token
+ Thẻ EMV: là dạng thẻ chíp có công dụng tạo OTP, không có khả năng dùng để chi tiêu như các loại thẻ thanh toán khác. EMV là chuẩn thẻ thông minh do 3 liên minh thẻ lớn nhất thế giới là Europay, Master Card và Visa International đưa ra. Quá trình chuyển đổi sang chuẩn EMV trên toàn thế giới đã và đang diễn ra từ vài năm nay. Việt Nam nằm trong khu vực có hạn áp dụng từ 1/1/2006, nhưng tới thời điểm này, mới chỉ có VPBank đã thực hiện phát hành thẻ EMV. Các ngân hàng khác chưa công bố kế hoạch chuyển đổi chính thức. Hình 17: Minh họa thẻ EMV Về mặt kỹ thuật, thẻ chíp có nhiều tính năng hơn thẻ từ. Một thẻ chíp có thể sử
dụngnhư là một thẻ ngân hàng, chứng minh thư, thẻ tín dụng, cũng có thể dùng để trả phí giao thông hay lưu trữ thông tin về y tế, bảo hiểm xã hội, thông tin cá nhân... + E-Token: là thiết bị có công dụng tạo OTP dựa trên sự kết nối thiết bị với máy tính mà khách hàng đang thực hiện giao dịch. E-Token là một thiết bị nhận dạng số, được tích hợp những giải pháp phần mềm bảo mật chuyên dụng, theo đúng chuẩn quốc
tế và kết nối với máy tính thông qua cổng giao tiếp USB.E-Token cho phép cả người dùng lẫn người quản trị bảo mật và quản lý hiệu quả quá trình chứng thực người dùng hệ thống bằng cách lưu trữ và sinh mật khẩu, chứng chỉ số và mã hóa tất cả thông tin đăng nhập (cả khóa chung và khóa riêng). E-Token cung cấp nền tảng bảo mật an toàn, hiệu quả, dễ sử dụng và triển khai trên diện rộng. Hình 18: Minh họa thiết bị E-Token 2.5.4. Tạo OTP sử dụng điện thoại di động Ngoài việc sử dụng các loại token, người dùng còn có thể dùng ngay chiếc điện thoại di động của mình, cùng phần mềm miễn phí “mật khẩu dùng một lần di động” (Mobile One Time Password - MOTP) để tạo OTP. Mỗi khi muốn truy cập vào hệ thống mạng nội bộ qua SSL VPN, người dùng phải nhập mã PIN (đã biết trước) vào điện thoại di động để tạo ra mật khẩu đăng nhập. Sau khi thực hiện kết nối SSL VPN, trình đăng nhập xuất hiện yêu cầu nhập username và password. Lúc này người dùng nhập username (đã biết trước) và mật khẩu vừa được tạo trên điện thoại di động để đăng nhập vào mạng nội bộ. Hình 19: Mô hình kết nối SSL VPN đến Vigor2950 có điện thoại hỗ trợ xác thực Cài đặt và sử dụng ứng dụng MOTP
Bộ định tuyến Vigor2950 của hãng DrayTek (Firmware v3.2.6_RC5) tích hợp sẵn cơ chế mật khẩu dùng một lần trong xác thực kết nối SSL và VPN (theo
giao thức PPTP, L2TP) là một trong những ứng dụng MOTP điển hình sử dụng trên điện thoại di động [21]. Sau khi cài đặt xong phần mềm MOTP vào điện thoại, bước tiếp theo và cũng quan trọng nhất là người dùng phải thiết lập cùng thời gian trên cả điện thoại và Vigor2950. Nếu thời gian sai lệch sẽ dẫn đến việc tạo mật khẩu sai - 1 phút là thời gian
tối đa để người dùng nhập mật khẩu được tạo ra từ điện thoại vào ô mật khẩu đăng nhập trên màn hình máy tính, khi thực hiện một kết nối SSL VPN. Ở đây để xác lập thời gian chính xác, trên Vigor2950 người dùng thiết lập đồng bộ thời gian với máy
chủ ntp.org, chọn “time zone” GMT+7; và người dùng nên “canh” thời gian trên Vigor2950 vừa nhảy qua phút mới thì chỉnh ngay lại thời gian trên điện thoại. Hình 20: Cài đặt phần mềm sinh OTP trên iPhone với Vigor2950. Sau khi người dùng thiết lập xong các thông số SSL VPN trên Vigor2950, phần thông số ở mục SSL VPN\User Account là phần mà người dùng cần quan tâm. Tại ô nhập username, người dùng nhấn chọn Enable Mobile One-Time Password (mOTP), lúc này hai ô Pin Code và Secret sẽ hiện ra, ô password sẽ ẩn đi. 2.5.5. Chuyển giao OTP sử dụng gmail Một công nghệ phổ biến thường được sử dụng cho việc cung cấp các OTP là tin nhắn văn bản. Từ các hệ thống xác thực tin nhắn gmail, một mật khẩu OTP được sinh và gửi thông qua một tin nhắn văn bản đến gmail của người dùng. Tương tự như với thẻ bảo mật, người dùng phải nhập OTP đã nhận được nhập vào giao diện đăng nhập nhằm xác minh tính chính xác và khẳng định đủ an toàn để truy nhập hệ thống dịch vụ hoặc ứng dụng. Đầu tiên, khách hàng đăng ký dịch vụ cùng với gmail cho ngân hàng. Khi
thực hiện giao dịch, khách hàng nhập thông tin thanh toán, máy chủ của ngân hàng
sẽ tạo OTP và gửi cho khách hàng thông qua một tổng đài bằng tin nhắn gmail. Sau
khi khách hàng nhận được tin nhắn chứa OTP, khách hàng sẽ phải nhập OTP vào để
máy chủ xác thực. Máy chủ kiểm tra OTP, nếu đúng thì sẽ thực hiện giao dịch, nếu
không sẽ có báo lỗi. Kết luận Nội dung chính của chương 2 đã trình bày các khái niệm cơ bản về mật khẩu sử dụng 1 lần OTP, các phương pháp sinh mật khẩu và các phương pháp chuyển
giao chúng đến người sử dụng. Mỗi phương pháp sinh và chuyển giao OTP đều có những đặc trưng và các ưu, nhược điểm riêng. Do đó, theo yêu cầu bảo mật cụ thể của mỗi hệ thống mà người dùng có thể lựa chọn một phương pháp phù hợp. Chương 3
XÂY DỰNG CHƯƠNG TRÌNH ỨNG DỤNG XÁC THỰC SỬ DỤNG OTP TRONG GIAO DỊCH NGÂN HÀNG TRỰC TUYẾN Trong chương này, luận văn trình bày các mô hình sử dụng mật khẩu OTP sử dụng trong ngân hàng giao dịch trực tuyển để đảm bảo tính bảo mật cho người dùng, nghiên cứu thử nghiệm việc xác thực giao dịch ngân hàng trực tuyến sử dụng OTP sử dụng phương thức chuyển giao qua gmail. 3.1 Đặt vấn đề Ngày nay, nhiều ngân hàng đã ứng dụng các phương pháp xác thực giao dịch trực tuyến sử dụng OTP khác nhau. Mỗi phương pháp sinh và chuyển giao OTP có
ưu và nhược điểm riêng và do đó chúng có khả năng ứng dụng với mức độ khác nhau. Trong số các phương pháp chuyển giao OTP, phương pháp chuyển giao OTP qua SMS được nhiều ngân hàng sử dụng vì tính cơ động trong giao dịch của nó. Hình 21: Mô hình nhận OTP qua gmail Trước khi có thể thực hiện các giao dịch trực tuyến có xác thực bằng OTP,
người dùng cần thực hiện các thủ tục đăng ký tài khoản giao dịch trực tuyến, gồm
username, password và gmail với ngân hàng. Sau đó, người dùng sẽ sử dụng các thông
tin này khi giao dịch chuyển tiền trên trang thanh toán trực tuyến của ngân hàng đó. 3.2 Mô hình sử dụng giao dịch trực tuyến của ngân hàng Eximbank
3.2.1 Giới thiệu Mobile OTP: Mobile OTP là ứng dụng tạo mật khẩu dùng một lần do Eximbank phát triển và được cung cấp miễn phí cho khách hàng sử dụng để xác thực cho các giao dịch thực hiện trên Internet Banking. 3.2.2 Hướng dẫn sử dụng Mobile OTP:
a) Đăng ký dịch vụ: Khách hàng đăng ký sử dụng dịch vụ Internet Banking chọn phương thức xác thực Mobile OTP. Đối với khách hàng đang sử dụng phương thức xác thực SMS OTP, liên hệ điểm giao dịch Eximbank gần nhất để đổi sang phương thức xác thực Mobile OTP. b) Cài đặt ứng dụng: Để sử dụng Mobile OTP khách hàng cần download và cài đặt ứng dụng EIB Mobile về điện thoại theo các bước sau: Điện thoại iPhone: từ biểu tượng Appstore trên màn hình chính, tìm kiếm ứng dụng EIB Mobile và tải ứng dụng về máy. Điện thoại sử dụng hệ điều hành Android: từ biểu tượng CH Play trên màn hình chính, khách hàng tìm kiếm ứng dụng với từ khóa EIB Mobile và tải ứng dụng về máy. Điện thoại sử dụng Java hoặc hệ điều hành Symbian: soạn tin nhắn theo cú pháp SET EIB MB gửi 8149 để tải ứng dụng về máy điện thoại. Hình 22: Hướng dẫn cài đặt ứng dụng Mobile OTP c) Đăng nhập và kích hoạt dịch vụ: Sau khi đăng ký thành công, khách hàng sẽ nhận được mật khẩu đăng nhập Mobile OTP qua E-mail đăng ký dịch vụ. Để kích hoạt dịch vụ, khách hàng thực hiện theo các bước sau: B1: Chọn nút “Kích hoạt” và đăng nhập với tên đăng nhập và mật khẩu nhận được từ Email của Eximbank. B2: Nhập mật khẩu mới (sau khi đăng nhập thành công). Mật khẩu này dùng để xác thực khi thực hiện chức năng “Đồng bộ OTP”. B3: Kích hoạt dịch vụ: Sau khi hoàn tất B2 Eximbank sẽ gửi tin nhắn yêu cầu kích hoạt đến thuê bao đăng ký dịch vụ. Để kích hoạt dịch vụ soạn tin nhắn theo cú pháp sau: MO {mã số OTP} gửi 8149 (mã số OTP được gửi trong tin nhắn yêu cầu
kích hoạt). B4: Đồng bộ OTP: Sau khi kích hoạt dịch vụ thành công, khách hàng chọn “Đồng bộ OTP” và nhập mật khẩu để thực hiện đồng bộ dữ liệu trước khi sử dụng. → Hoàn tất quá trình kích hoạt, ứng dụng Mobile OTP sẽ hiển thị OTP là dãy 8 số với thời gian hiệu lực cho mỗi dãy số OTP là 60 giây. Hình 23: Hướng dẫn đăng nhập và kích hoạt dịch vụ d) Sử dụng Mobile OTP để xác thực giao dịch trên Internet Banking Eximbank:
B1: Khách hàng thực hiện giao dịch trên Internet Banking. B2: Chọn loại xác thực là Mobile OTP B3: Nhập mã xác thực OTP bao gồm 8 chữ số từ ứng dụng trên điện thoại di động. B4: Chọn “Thực hiện” để hoàn tất giao dịch. Hình 24: Hướng dẫn sử dụng Mobile OTP để xác thực giao dịch trên Internet e) Những lưu ý khi sử dụng Mobile OTP: Khách hàng sẽ thực hiện đồng bộ OTP trong các trường hợp sau: Sau khi kích hoạt thành công dịch vụ. Khi nhận được thông báo “Dữ liệu tạo số OTP đã hết hạn”. B1: Chọn nút “Đồng bộ OTP” B2: Nhập mật khẩu đăng, sau đó chọn nút “Xác nhận”. B3: Nhận thông báo kết quả đồng bộ OTP thành công. Hình 25: Hướng dẫn chức năng đồng bộ OTP trong một số trường hợp Quy trình các bước thực hiện cấp lại mật khẩu (trong trường quên mật khẩu hoặc dịch vụ bị khóa do nhập sai mật khẩu) như sau: B1: Chọn nút “Đồng bộ OTP”
B2: Chọn “Quên mật khẩu” B3: Chọn nút “Xác nhận” B4: Tạo mật khẩu thành công. Khách hàng kiểm tra E-mail để nhận mật khẩu mới. Hình 26: Hướng dẫn cấp lại mật khẩu Quy trình các bước thực hiện Đổi mật khẩu (trong trường hợp khách hàng muốn thay đổi mật khẩu đang sử dụng): B1: Chọn chức năng “Đổi mật khẩu”
B2: Nhập mật khẩu hiện tại, mật khẩu mới, xác nhận mật khẩu mới và chọn “Thực hiện” B3: Thông báo đổi mật khẩu thành công. Hình 27: Hướng dẫn đổi mật khẩu 3.3 Kết quả xây dựng mô hình thực nghiệm Trên cơ sở các lý thuyết và các mô hình tham khảo, luận văn sẽ trình bày kết quả khi xây dựng một mô hình thực nghiệm mô phỏng các thao tác cơ bản trong giao dịch trực tuyến thông qua việc sinh OTP qua Gmail. Chương trình thực nghiệm
mô phỏng các thao tác giao dịch trực tuyến sử dụng xác thực trực tuyến cho người
dùng bằng OTP được xây dựng một số mô đun trên môi trường lập trình Java. Các
mô đun được mô tả qua kịch bản thực hiện giao dịch trực tuyến có xác thực bằng
OTP gồm các bước sau: 1. Người dùng đăng nhập vào trang thanh toán trực tuyến của ngân hàng sử dụng username và password đã đăng ký. Hình 28: Người dùng đăng nhập vào hệ thống 2. Hệ thống xác thực thông tin tài khoản người dùng; Nếu chính xác sẽ cho người dùng truy cập vào hệ thống. 3. Người dùng vào ứng dụng chuyển khoản. Giao diện chuyển khoản xuất hiện. Người dùng sẽ nhập lần lượt các thông tin của giao dịch vào giao diện chuyển tiền trực tuyến bao gồm: tên tài khoản người nhận, số tài khoản người nhận,
số tiền bằng chữ, số tiền bằng số, nội dung chuyển khoản... Hình 29: Người dùng nhập thông tin chuyển khoản Người dùng nhấn vào nút “Hoàn Thành”. Giao diện xác thực OTP xuất hiện. Hình 30: Người dùng chấp nhận chuyển khoản 4. Một tin nhắn sẽ được gửi từ tổng đài của hệ thống tới gmail của người dùng chứa mã giao dịch OTP. Người dùng nhập mã OTP nhận được từ tin nhắn gmail vào ô xác thực và nhấn nút “Chấp nhận”. Nếu người dùng nhập đúng OTP thì
giao diện giao dịch thành công xuất hiện. Nếu người dùng nhập sai thì hệ thống sẽ yêu cầu người dùng nhập lại OTP. 5. Giao dịch thành công Hình 31: Người dùng chuyển khoản thành công 3.4. Cài đặt Chương trình thử nghiệm được cài đặt trên hệ điều hành Microsoft Windows, ngôn ngữ Java trên phần mềm lập trình Netbeans 6.9 kết hợp với hệ quản trị cơ sở dữ liệu My SQL để hệ thống có thể truy xuất cơ sở dữ liệu. Thuật toán SHA-1 được sử dụng để tạo ra OTP. Cơ sở dữ liệu được sử dụng để xác thực người dùng, lưu lịch sử giao dịch. Cơ sở dữ liệu lưu trữ username, password, tên chủ tài khoản, số tiền hiện có và các lần giao dịch. Hình 32: Mô tả lịch sử giao dịch Phần mềm bên server được xây dựng dưới dạng web server. Phía server dựa vào OTP đã gửi tới di động người dùng để đưa ra quyết định cho phép người dùng thanh toán hay từ chối yêu cầu này. Phần mềm này tương tác với cơ sở dữ liệu lưu thông tin của người dùng cũng như tài khoản của họ. Chương trình sử dụng một gmail mô phỏng một tổng đài để gửi tin nhắn chứa OTP. Kết luận
Trong chương này, chúng ta đã tiến hành xây dựng và thử nghiệm chương trình thử nghiệm về xác thực giao dịch ngân hàng trực tuyến sử dụng OTP chuyển giao qua gmail. Phương pháp sinh và chuyển giao OTP được cài đặt có khả năng cung cấp tính bảo mật cao cho xác thực giao dịch trực tuyến. Các ứng dụng này có khả năng triển khai rộng rãi trong thực tế do không đòi hỏi bổ sung phần cứng hay
phần mềm phức tạp. KẾT LUẬN Mật khẩu sử dụng một lần (OTP) là mật khẩu chỉ được sử dụng một lần duy
nhất để xác thực một giao dịch hoặc một phiên làm việc. Do OTP chỉ được sử dụng một lần nên có độ an toàn cao hơn so với mật khẩu truyền thống, tránh được các dạng tấn công như nghe lén. Luận văn nghiên cứu về mật khẩu sử dụng một lần, các kỹ thuật sinh và chuyển giao mật khẩu một lần và ứng dụng vào xác thực các giao thức trực tuyến ứng dụng tại các ngân hàng. Các kết quả chính của luận văn: + Nghiên cứu tổng quan về mật khẩu sử dụng một lần và ứng dụng của mật khẩu sử dụng một lần. + Nghiên cứu các phương pháp sinh mật khẩu sử dụng một lần dựa trên
thời gian, dựa trên thuật toán; phương pháp sinh mật khẩu bằng Token và điện thoại di động; các phương pháp chuyển giao mật khẩu sử dụng một lần bằng giấy, bằng tin nhắn SMS. + Nghiên cứu các ứng dụng của OTP trong các giao dịch ngân hàng trực tuyến tại Việt Nam, cài đặt thử nghiệm mô phỏng phương pháp chuyển giao OTP thông qua tin nhắn gmail và sinh OTP trên nền ngôn ngữ Java. Hướng phát triển tiếp theo của luận văn: + Cài đặt và thử nghiệm thành công ứng dụng mật khẩu sử dụng một lần trong xác thực giao dịch ngân hàng trực tuyến sử dụng phương pháp chuyển giao OTP thông qua tin nhắn SMS và sinh OTP. + Nghiên cứu về đăng nhập một lần sử dụng mật khẩu sử dụng một lần; + Cải tiến ứng dụng sinh OTP trên điện thoại di động về giao diện và tính năng để việc xác thực người dùng trở nên thân thiện, tiện lợi và đảm bảo độ an toàn cao hơn. TÀI LIỆU THAM KHẢO [1]. D. M’Raihi, J. Rydell, S. Bajaj, S. Machani, D. Naccache, OATH Challenge- Response Algorithm, June 2011. [2]. D. M’Raihi, J. Rydell, S. Bajaj, S. Machani, D. Naccache, Time-Based One- Time Password Algorithm, May 2011. [3]. Neil M. Haller, Bellcore, Morristown, New Jersey - THE S-KEY ONE-TIME PASSWORD SYSTEM, 2011 [4]. One Time Password http://en.wikipedia.org/wiki/One-time_password, 9/2013 [5]. Challenge-Response Algorithm http://en.wikipedia.org/wiki/Challenge%E2%80%93response_authentication,
9/2013 [6]. Dương Hoàng Anh, Nguyễn Việt Huy, Nguyễn Văn Tân, Phạm Minh Tú - Báo cáo nghiên cứu khoa học: Nghiên cứu về mật khẩu sử dụng một lần và ứng dụng, 12/2012. [7]. Phạm Tuấn Dũng - Luận văn: Nghiên cứu phương pháp bảo mật cho cơ chế đăng nhập một lần ứng dụng trong hệ phân tán, 2011. [8]. Vũ Vinh Quang, Nguyễn Đình Dũng, Nguyễn Hiền Trinh, Dương Thị Mai Thương, Giáo trình lý thuyết thông tin, Nhà xuất bản Khoa học Kĩ thuật, năm 2010. PHỤ LỤC
Một số chương trình nguồn9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
1. Modun Log in to Admin Panel
1. Modun chuyển khoản
cellspacing="0">
60
<%
boolean send = false;
int tienchuyen = 0;
boolean giaodichthanhcong = false;
boolean xacnhanthanhcong = false;
boolean xacnhanroi = false;
String code = "";
String userid = (String) session.getAttribute("userid");
String email = (String) session.getAttribute("email");
PreparedStatement pstmt = null;
DBPool dbPool = new DBPool();
Connection connection =
dbPool.getConnectionMysql(DBConfig.urlmysql,
DBConfig.usermysql, DBConfig.passmysql);
pstmt = connection.prepareStatement("SELECT * FROM
taikhoan WHERE user_id =" + userid);
ResultSet rs = pstmt.executeQuery();
String tentaikhoanchuyen = "";
String taikhoanchuyen = "";
long sodukhadung = 0;
if (rs.next()) {
tentaikhoanchuyen = rs.getString("tentaikhoan");
taikhoanchuyen = rs.getString("sotaikhoan");
sodukhadung = rs.getLong("sodu");
}
String guilai = "";
if(request.getParameter("guilai") != null) {
guilai = request.getParameter("guilai");
}
String xacnhan = "";
if(request.getParameter("xacnhan") != null) {
xacnhan = request.getParameter("xacnhan");
}
String tentaikhoannhan = "";
if(request.getParameter("tentaikhoannhan") != null) {
tentaikhoannhan = request.getParameter("tentaikhoannhan");
}
String taikhoannhan = "";
if(request.getParameter("taikhoannhan") != null) {
taikhoannhan = request.getParameter("taikhoannhan");
}
String sotienbangchu = "";
if(request.getParameter("sotienbangchu") != null) {
sotienbangchu = request.getParameter("sotienbangchu");
}
String sotienbangso = "";
if(request.getParameter("sotienbangso") != null) {
sotienbangso = request.getParameter("sotienbangso");
}
String noidungchuyenkhoan = "";
if(request.getParameter("noidungchuyenkhoan") != null) {
61
noidungchuyenkhoan =
request.getParameter("noidungchuyenkhoan");
}
boolean ok = false;
if ("".equals(tentaikhoannhan) || "".equals(taikhoannhan)
|| "".equals(sotienbangchu) || "".equals(sotienbangso) ||
"".equals(noidungchuyenkhoan)) {
request.setAttribute("value_null", "Hãy nhập đầy đủ thông
tin");
} else {
pstmt = connection.prepareStatement("SELECT * FROM
taikhoan WHERE sotaikhoan like '" + taikhoannhan + "'");
rs = pstmt.executeQuery();
if (rs.next()) {
ok = true;
} else {
ok = false;
request.setAttribute("taikhoankhongtontai", "Tài khoản
không có trong hệ thống");
}
if (ok) {
pstmt = connection.prepareStatement("SELECT * FROM
taikhoan WHERE tentaikhoan like '" + tentaikhoannhan + "'");
rs = pstmt.executeQuery();
if (rs.next()) {
ok = true;
} else {
ok = false;
request.setAttribute("tentaikhoankhongdung", "Tên Tài
khoản không đúng");
}
}
int user_id = 0;
try {
tienchuyen = Integer.parseInt(sotienbangso);
user_id = Integer.parseInt(userid);
if(sodukhadung < tienchuyen) {
ok = false;
request.setAttribute("tienvuotquasodu", "Số tiền vượt quá
số dư khả dụng");
}
}catch(Exception e) {
ok = false;
request.setAttribute("sotienbangsoloi", "Nhập sai số tiền
bằng số");
}
if((ok && "".equals(xacnhan)) || "1".equals(guilai)) {
CreateOTP createotp = new CreateOTP();
code = createotp.CreateOTPMain(user_id, connection);
send = createotp.senEmailOtp(DBConfig.email, email,
DBConfig.pass_from_email, "One-Time_Passwod", "One-Time_Passwod:
"+code) ;
}
}
if(!"".equals(xacnhan)) {
XacNhan xn = new XacNhan();
xacnhanthanhcong = xn.xacNhanOtpCode(userid, xacnhan);
xacnhanroi = true;
62
if(xacnhanthanhcong) {
XulyGiaoDich giaodich = new XulyGiaoDich();
giaodichthanhcong =
giaodich.chuyenKhoan(taikhoanchuyen, taikhoannhan, tienchuyen,
noidungchuyenkhoan);
}
}
%>
<%dbPool.closeConnection(connection, null);%>
Demo OTP-One Time Password
For Bank
document.forms[frm].action = "Service.jsp?guilai=" + guilai;
document.forms[frm].submit();