ĐẠ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: PC và một quy tắc giải mã tương ứng dk D. Mỗi

ek: P C và dk: CP 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

9

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.

10

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.

11

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: .

12

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:

13

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ì?

14

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;

15

 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.

16

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.

17

+ 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

18

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

19

độ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.

20

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:

21

- 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.

22

- 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.

23

- 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

24

+ 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ã

25

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

26

Đượ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

27

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ả

28

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

29

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.

30

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

31

+ Đượ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

32

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.

33

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

34

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

35

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.

36

+ 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.

37

- 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

38

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

39

Đâ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.

40

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

41

đượ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.

42

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

43

“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...

44

+ 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

45

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.

46

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.

47

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.

48

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:

49

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

50

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

51

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

52

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

53

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ý.

54

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

55

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.

56

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.

57

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.

58

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.

59

PHỤ LỤC Một số chương trình nguồn

1. Modun Log in to Admin Panel


class="required-entry input-text" value="" />

title="Login" onclick="return btnLogin_Click()" />

1. Modun chuyển khoản

cellspacing="0">

60

document.forms[frm].action = "Service.jsp?guilai=" + guilai; document.forms[frm].submit();

<%dbPool.closeConnection(connection, null);%>
<% 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);

} } %>

cellspacing="0">


Chuyển khoản trong hệ thống

cellspacing="3">

63

64

<%if((send && !giaodichthanhcong) || (xacnhanroi &&

!xacnhanthanhcong)) {%>

<%}else if(!giaodichthanhcong) {%>

65

<%}if(giaodichthanhcong) {%> <%}%>


 

 
Demo OTP-One Time Password

For Bank

3. Mô đun XacNhan

public class XacNhan { public boolean xacNhanOtpCode(String user_id, String code) { boolean result = false; PreparedStatement pstmt = null; DBPool dbPool = new DBPool(); Connection connection = dbPool.getConnectionMysql(DBConfig.urlmysql, DBConfig.usermysql, DBConfig.passmysql); try { pstmt = connection.prepareStatement("SELECT * FROM otp_code WHERE

user_id =" + user_id

+" and code ='"+code+"'"); ResultSet rs = pstmt.executeQuery(); if (rs.next()) { result = true; String sqlStr = "delete from otp_code where user_id = "+ user_id ;

66

pstmt = connection.prepareStatement(sqlStr); pstmt.executeUpdate(); } } catch (Exception e) { e.printStackTrace(); }finally { try { connection.close(); } catch (SQLException ex) { Logger.getLogger(XacNhan.class.getName()).log(Level.SEVERE, null,

ex); } } return result; }

}