Tải bản đầy đủ (.doc) (33 trang)

Báo cáo tiểu luận môn an toàn mạng chủ đề Yubikey Authentication

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (589.04 KB, 33 trang )

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ
CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
THÔNG TIN
KHOA KTMT
LỚP KTMT02
Báo cáo
Môn: AN TOÀN MẠNG
Đề tài: Yubikey Authentication
Giảng viên hướng dẫn:
ThS. Phạm Xuân Khánh
Nhóm sinh viên thực hiện:
Ngô Thị Hồng Ngân 07520240
Đinh Tiên Hoàng 07520543
1
Thành phố Hồ Chí Minh, ngày 17 tháng 12 năm 2010
ĐẶT VẤN ĐỀ
Khi nhu cầu giao dịch, trao đổi thông tin trên các mạng truyền thông ngày càng
cao sẽ đòi hỏi các dịch vụ đảm bảo tính an ninh của tài khoản người dùng càng
phải phát triển. Một trong những công nghệ đó là OTP (One – Time Password).
OTP được nhiều website khuyến cáo người dùng nên sử dụng như các trang
game (www.volam.zing.vn), giao dịch điện tử (ibanking), và gần đây là
Facebook, nhằm tăng tính bảo mật cho tài khoản khách hàng của họ.
Sự ra đời của các thiết bị bảo mật theo công nghệ OTP, mà tiêu biểu là Yubikey
tạo điều kiện thuận lợi cho người dùng. Chỉ với một thao tác nhẹ nhàng, đơn
giản lên Yubikey, người dùng đã tạo ra một mật khẩu mới cho họ mà sau mỗi
lần thoát ra thì mật khẩu đó không còn tác dụng, do đó tài khoản của họ rất khó
có thể bị đột nhập.
Yubikey không là xa lạ với các nước phát triển nhưng ở Việt Nam nó vẫn là
một thứ sản phẩm xa lạ và có phần “xa xỉ”, nhất là đối với sinh viên. Do đó, đây
là lần đầu tiên nhóm có cơ hội tìm hiểu về Yubikey. Trong quá trình tìm tòi


không thể tránh những thiếu sót, rất mong sự đóng góp của thầy và các bạn.
Xin chân thành cảm ơn!
2
NỘI DUNG
I. Giới thiệu OTP
1. OTP và các loại mật khẩu khác ……………………………………4
2. Tìm hiểu công nghệ OTP ………………………………………… 9
II. Giới thiệu Yubikey
1. Yubikey là gì? …………………………………………………… 10
2. Sử dụng Yubikey như thế nào? ……………………………………11
3. Yubikey hoạt động như thế nào? ………………………………… 12
III. Làm thế nào thêm Yubikey vào hệ thống riêng của mình? ………………
16
IV. Giải pháp xác thực USB OTP Token
…………………………………… 27
V. Giới thiệu một số sản phẩm OTP trên thị trường
……………………… 29
VI. Mức độ an toàn của OTP …………………………………………………
31
Tài liệu tham khảo …………………………………………………………….33
3
I. GIỚI THIỆU VỀ OTP
Vì Yubikey là thiết bị hoạt động theo nguyên tắc OTP (one - time password) nên
chúng ta sẽ tìm hiểu về OTP trước tiên.
1. OTP và các loại mật khẩu khác
a. Mật khẩu truyền thống
• Đây là công nghệ bảo mật đã áp dụng từ những ngày đầu tiên khi
máy tính xuất hiện. Năm 1961, viện công nghệ MIT cho ra mắt một
trong những hệ thống chia sẻ đầu tiên trên thế giới – CTSS – cùng
với hệ thống mật khẩu sơ khai bao gồm lệnh LOGIN, yêu cầu người

dùng nhập vào mật khẩu. Sau khi nhập lệnh PASSWORD, người
dùng sẽ phải nhập tiếp mật khẩu của mình để được hệ thống xác
nhận.
• Cũng trong thập niên 1960, công nghệ bảo mật bằng mật khẩu dần
được hoàn thiện thành dạng password được sử dụng phổ biến nhất
cho đến ngày nay: alpha – numeric password, tức mật khẩu dưới
dạng một chuỗi các chữ cái và chữ số. Bất kỳ chuỗi ký tự nào cũng
có thể trở thành mật khẩu, nhưng người dùng được khuyến cáo nên
đặt mật khẩu của mình phức tạp đủ để không bị người khác đoán ra.
Mật khẩu càng phức tạp, khó đoán thì độ bảo mật càng cao. Tuy
nhiên, độ phức tạp của mật khẩu cũng tỉ lệ nghịch với việc người
dùng có thể nhớ chúng một cách dễ dàng. Ngoài việc khó có thể tự
đặt ra một mật khẩu đủ khó để không bị người khác đoán ra nhưng
cũng phải đủ dễ để chính bản thân người dùng có thể ghi nhớ, alpha
4
– numberic password còn phải đối mặt với các cuộc tấn công chiếm
password và các chương trình đánh cắp mật khẩu.
• Dạng tấn công phổ biến nhất là tấn công tra cứu từ điển (dictionary
attack). Phương thức này hiểu đơn giản là kiểu đoán mật khẩu với
các cụm từ có nghĩa thường được nhiều người chọn dùng làm mật
khẩu (thay vì các chuỗi ký tự ngẫu nhiên như được khuyến cáo), kẻ
tấn công sẽ dùng chương trình tự động thử tất cả các từ có nghĩa
trong từ điển để bẻ khóa password.
• Ngoài ra còn có hàng trăm chương trình keylogger được sử dụng để
ghi nhận quá trình nhập password của nạn nhân rồi tự động gửi
thông tin về cho kẻ có ý muốn đánh cắp password đó. Hoặc kiểu tra
cứu từng ký tự trong mật khẩu (brute-force attack), chương trình
sẽ tự động dò tìm từng ký tự trong chuỗi mật khẩu. Tuy dạng brute-
force attack có tỉ lệ phá mật khẩu cao nhưng nếu người dùng sử
dụng các loại mật khẩu bao gồm nhiều ký tự chữ và số xen lẫn ký tự

đặc biệt thì có thể phải mất nhiều năm mới có thể tìm ra chuỗi mật
khẩu hoàn thiện (Ví dụ: n$W0k1J^57$h@k3R mật khẩu được cho
là có tính bảo mật cao nhưng lại khó nhớ).
• Trước sự đe dọa của các chương trình đánh cắp mật khẩu, việc phát
minh ra nhiều dạng password mới thay thế cho kiểu truyền thống là
hết sức cần thiết, và mật khẩu hình ảnh cùng với mật khẩu một lần
là 2 trong số những số ấy.
b. Mật khẩu dạng hình ảnh (Graphical password)
• Về cơ bản, con người có xu hướng ghi nhớ các thông tin dưới dạng
hình ảnh dễ dàng hơn thông tin dưới các dạng khác. Chúng ta có thể
gặp khó khăn khi phải nhớ một chuỗi 50 ký tự, nhưng lại dễ dàng
nhớ gương mặt của những người ta đã gặp, những nơi ta đã đến và
những thứ ta đã thấy. Dựa vào đặc điểm này, người ta đã tạo ra mật
khẩu hình ảnh (graphical password).
5
• Để đăng nhập vào một website hay hệ thống được bảo mật bằng
graphical password, thay vì phải nhập một chuỗi ký tự như ở alpha–
numberic password, người dùng sẽ được yêu cầu ấn chuột vào 4
điểm trên bức ảnh mà hệ thống đưa ra. 4 điểm này chính là mật
khẩu mà họ đã xác định và ghi nhớ trong quá trình tạo mật khẩu. Dĩ
nhiên người dùng cũng có thể chọn số lượng điểm bí mật nhiều hơn
4 để tăng độ bảo mật.
• Ở một hình thức khác, người dùng sẽ chọn và ghi nhớ 4 hoặc nhiều
hơn các biểu tượng trong quá trình tạo password và chọn lại chúng
trong hàng loạt biểu tượng được sắp xếp ngẫu nhiên và thay đổi
trong quá trình đăng nhập.
6
Hình1: chọn password theo hình ảnh
• Trường Đại học Malaya (Malaysia) còn cung cấp một thuật toán
khác: khi đăng ký tài khoản, người dùng sẽ tạo password bằng cách

chọn các biểu tượng do máy chủ cung cấp. Khi đăng nhập, những
biểu tượng này sẽ được thu nhỏ và xoay theo các chiều khác nhau,
người dùng lúc này sẽ phải nhận ra biểu tượng mà mình đã chọn,
sau đó nhập vào ô password những ký tự hiện bên dưới biểu tượng
đó. Giải pháp này khá mất thời gian nên vẫn còn đang trong giai
đoạn thăm dò ý kiến người dùng.
Hình 2: thuật toán của trường đại học Malaysia
• Điểm mạnh của graphical password là dễ nhớ mà mức độ bảo mật
lại cao vì hacker không thể sự dụng cách tấn công từ điển để đánh
cắp mật khẩu và các chương trình keylogger cũng trở nên vô dụng
vì các biểu tượng được xáo trộn ngẫu nhiên mỗi lần đăng nhập. Tuy
nhiên bạn cũng có thể bị lộ password nếu người khác quan sát và
ghi nhớ các biểu tượng cũng như điểm ảnh bạn chọn mỗi lần đăng
nhập.
7
c. Mật khẩu dùng một lần duy nhất (One time password - OTP)
• Nguyên lý hoạt động của OTP như sau: sau khi đã đăng ký dịch vụ,
mỗi lần muốn đăng nhập, người dùng sẽ được cung cấp một mật
khẩu tạo ra bởi đầu đọc và thẻ thông minh hay thiết bị tạo mật khẩu
cầm tay (token) nhờ vào kết nối internet với máy chủ của dịch vụ
cung cấp OTP hoặc cũng có thể thông qua thẻ OTP in sẵn hhay điện
thoại di động mà không cần đến kết nối internet. Mật khẩu này sẽ tự
mất hiệu lực sau khi người dùng đăng xuất (log out) ra khỏi hệ
thống. Như vậy, nếu bạn bị lộ mật khẩu thì người có được mật khẩu
đó cũng không thể dùng được, và do đó giải pháp OTP có tính bảo
mật rất cao.
• Quá trình tạo mật khẩu mới sẽ lặp lại mỗi lần người dùng đăng nhập
vào hệ thống được bảo mật bằng OTP. Công nghệ OTP được dùng
nhiều trong chứng thực trực tuyến (thương mại trực tuyến). Hiện
nay người dùng các thiết bị cầm tay như iPhone, Blackberry cũng có

thể tự cài đặt cơ chế bảo mật OTP bằng các chương trình như
VeriSign, RSA SecureID hay SafeNet MobilePASS.
Ngày càng có nhiều giải pháp mới giúp tăng cường tính bảo mật của password.
Nhưng dù với bất cứ giải pháp nào thì người dùng cũng nên tự bảo vệ mình bằng
cách lựa chọn và ghi nhớ mật khẩu của mình thật hiệu quả, cũng như tăng cường
các biện pháp phòng vệ trước sự đe dọa của hacker và các chương trình
keylogger.
8
Hình 3: công nghệ OTP trên mobile
2. Tìm hiểu công nghệ OTP
a. Mục đích: làm cho việc truy cập bất hợp pháp đến những tài nguyên được
giới hạn trở nên khó khăn hơn, ví dụ như với một tài khoản máy. Thông
thường, password cố định có thể được truy cập bởi người dùng bất hợp
pháp dễ dàng hơn trong trường hợp họ có đủ thời gian và số lần truy cập.
bằng việc thường xuyên thay đổi password, giống như cài chúng ta làm
với OTP, sự rủi ro này có thể giảm xuống đáng kể.
b. 3 kiểu cơ bản
• Kiểu thứ nhất, dùng một thuật toán để tạo ra một passworrd mới dựa
trên password trước đó: dựa trên phương pháp của Leslie Lamport
là dùng một hàm một chiều (hàm f). Hệ thống OTP làm việc bằng
cách khởi đầu với một giá trị s, sau đó sản sinh ra các password với
9
giá trị : f(s), f(f(s)), f(f(f(s))) rất nhiều lần tương đương với số lần
sử dụng. Nếu như một người nào đó thấy được password sử dụng
một lần, họ chỉ có thể truy cập được một phiên duy nhất, nó sẽ
không thể lặp lại lần nữa khi phiên truy cập đó kết thúc. Để có được
password trong dãy từ password của lần truy cập trước đó, người đó
phải tìm cách để tính ngược được hàm nghịch đảo (f-1), Vì hàm f là
hàm một chiều nên điều này cực kỳ khó để thực hiện. Nếu f là một
hàm mã hóa hash (cryptographic hash function) thì nó không thể

nào tính toán được (như với trình độ hiện nay).
• Kiểu thứ hai được dựa trên sự đồng bộ thời gian giữa nhà cung cấp
dịch vụ (authentication server) và khách hàng (clien) được cung cấp
password: Password sử dụng một lần kiểu đồng bộ thời gian luôn có
mối quan hệ mật thiết với một thiết bị phần cứng gọi là token (ví dụ
một người được cung cấp thiết bị token cá nhân để tạo một
password sử dụng một lần). Bên cạnh thiết bị này là 1 đồng hồ
chính xác được đồng bộ với đồng hồ của nhà cung cấp dịch vụ.
Trong hệ thống OTP này, thời gian là một phần quan trọng của thuật
toán tạo ra password, từ đó việc tạo ra passworrd mới dựa trên thời
gian hiện tại khác với việc dựa trên password trước đó hay là một từ
khóa. Điện thoại di động hoặc PDA cũng có thể được dùng để tạo
OTP…
• Kiểu thứ 3 cũng sử dụng một thuật toán nhưng pasword thì được
căn cứ trên một trò chơi (challenge) .Ví dụ, một số ngẫu nhiên được
chọn bởi server xác thực hoặc transection detail và một bộ đếm thay
cho password trước đó.
II. GIỚI THIỆU YUBIKEY
Như đã nói, Yubikey là thiết bị sử dụng công nghệ OTP.
1. Yubikey là gì?
10
• Nó là một hình chữ nhật nhỏ, về cơ bản là bao gồm một cổng usb và
một nút bấm. Nó giống như một usb flash nhỏ, kích thước 18x45x2 mm,
nặng chừng 2 gram, dễ dàng móc vào dây khóa hay đựng trong ví.
Hình 4: Yubikey rất nhỏ gọn
• YubiKey là một phương thức đăng nhập an toàn vào nhiều websites
bằng cách sử dụng một thẻ USB bảo mật. Nó không cần phần mềm đặc
biệt, và nó chỉ tạo ra một OTP (One Time Password) mỗi lần đăng nhập.
2. Sử dụng Yubikey như thế nào?
• Khi cắm yubikey vào cổng usb, nó tự coi mình là một keyboard, tức nó

là nền độc lập (platform-independent) miễn là thiết bị host hỗ trợ nhập dữ
liệu qua đặc tính kĩ thuật USB Human Interface Device (HID). Nó lấy
năng lượng từ host. Các kết nối bề mặt vàng khá mạnh mẽ và bền. Theo
một đại diện yubico, yubikey vẫn sử dụng được dù bị ngâm trong một
chu kì máy giặt.
• Mỗi lần nhấn nút trên thiết bị, nó lại tạo ra một khẩu mới và gửi mật
khẩu đó đến host. Mật khẩu này có thể được sử dụng bởi dịch vụ để xác
nhận bạn là một người sử dụng.
11
Hình 5: kết nối vào máy thông qua cổng usb Hình 6: bề mặt khá
bền
• YubiKeys làm việc như sau: Các thiết bị tự xác nhận như là một bàn phím
USB để nó làm việc với hệ điều hành bất kì. Khi nút YubiKey được nhấp
vào, nó hiển thị ra một chuỗi OTP. OTP là một chuỗi mã hóa ModHex,
chuỗi bao gồm một ID duy nhất và một chuỗi mã hóa AES-128. Các chuỗi
được mã hóa chứa: Một ID tĩnh bí mật, số lần yubikey được cắm vào một
cổng USB. Một mốc thời gian (dựa trên một đồng hồ 8Hz bắt đầu từ khi
thiết bị được nạp). Số lượng OTP được tạo ra từ khi thiết bị được nạp. 2
byte số giả ngẫu nhiên. Và một tổng kiểm tra CRC. Chuỗi ModHex được
gửi đến các máy chủ xác thực YubiKey nơi nó được giải mã và kiểm tra
thấy OTP là hợp lệ.
3. Yubikey hoạt động như thế nào?
RoundCube là một ứng dụng web chuyên quản lý email hoạt động dựa trên
AJAX. Chúng ta sử dụng nó thông qua trình duyệt web của mình giống
như khi sử dụng gmail. RoundCube là mã nguồn mở và dựa trên PHP, do
đó nên nó dễ dàng để thêm Yubikey authentication.
12
Thông thường, RoundCube yêu cầu chúng ta nhập địa chỉ email và
password để đăng nhập. Tuy nhiên, bây giờ màn hình đăng nhập có thêm
trường Yubikey OTP (one-time password). Việc cần làm là nhập email và

password vào, khi vị trí con trỏ ở trong trường yubikey, bấm ngón tay vào
nút trên yubikey. Sau một lát, trong trường yubikey sẽ xuất hiện chuỗi 44
kí tự, và theo sau là kí tự xuống dòng (kí tự này thông báo kết thúc chuỗi
và bắt đầu gửi để xác nhận). Giả sử là Yubikey đã kết nối với tài khoản của
chúng ta, chúng ta sẽ được đăng nhập.
Hình 7: màn hình đăng nhập RoundCube
Tuy nhiên, không nên chỉ dùng yubikey là phương pháp xác nhận duy nhất.
Bởi vì chỉ cần người nào đó có được Yubikey của bạn và biết được thông
tin đăng nhập tương ứng sẽ có thể truy cập tài khoản Yubikey. Hiểu theo
cách khác, Yubikey được sử dụng như một thuộc tính cho một chương
trình xác nhận có nhiều thuộc tính để tăng cường an ninh. VD: ai đó có thể
thu thập các mật khẩu của bạn bằng cách kiểm tra các gói TCP nhưng mật
khẩu Yubikey họ bắt được sẽ không có tác dụng nữa vì nó chỉ được sử
dụng một lần.
Cách thức mã hóa chuỗi 44 kí tự
13
Chuỗi 44 kí tự chỉ sử dụng 1 lần mỗi lần đăng nhập do đó khả năng tài
khoản của bạn bị đánh cắp rất khó xảy ra. Người khác có thể biết username
và password của bạn nhưng không có yubikey thì không thể login vào tài
khoản.
Xem xét chuỗi kí tự Yubikey sẽ truyền đến máy chủ:
tlerefhcvijlngibueiiuhkeibbcbecehvjiklltnbbl
Chuỗi gồm 22 bytes trong đó 16bytes token và 6bytes ID public.
Trong chuỗi 16bytes, các bytes được phân bổ như sau:
- 6 bytes đầu giữ ID bí mật duy nhất của yubikey, nó được ấn định
khi lập trình Yubikey. Từ các Yubikey thì không thể tra ra được
nó. 6 bytes dịch thành 2
(6*8)
= 281,474,976,710,656 kết hợp (duy
nhất) của các bit. Đó là số IDs mà Yubico có thể phát hành.

- 2 bytes tiếp theo lưu trữ một bộ đếm các phiên truy cập. Giá trị
khởi đầu của counter là 0 và nó được tăng lên sau mỗi lần cắm vào.
2 bytes này cho phép 2
(2*8)
= 65536 phiên.
- 3 bytes tiếp theo được sử dụng làm mốc thời gian (time stamp),
được lưu trữ trong bộ nhớ ổn định ở mỗi lượt. Mỗi lần cắm thiết bị,
thời gian bắt đầu ở 0 và tiếp tục tăng lên. Vì nó tăng bằng đồng hồ
8Hz nội nên các giá trị đếm sẽ hết sau khoảng 24 ngày. Lúc đó cần
rút Yubikey và cắm nó trở lại.
- Byte 12 là bộ đếm phiên bắt đầu tại 0 và tăng lên mỗi lần một
token được tạo ra. Khi nó đạt tới giá trị tối đa là 255, nó trở về 0.
- Byte 13, 14 là các số giả ngẫu nhiên được tạo bởi bộ dao động
chạy tự do. Những byte này được dùng để thêm chỉ số entropy cho
văn bản thuần túy.
- 2 bytes cuối chứa giá trị checksum sử dụng thuật toán CRC-16 trên
tất cả giá trị của token. Ban đầu 2 bytes này được thiết lập tại 0.
Checksum này nhằm kiểm tra tính toàn vẹn dữ liệu.
14
Ngoài 16byte được mã hóa như trên có thêm 6byte ID public. ID public này
hoàn toàn khác ID bí mật sử dụng để xây dựng chuỗi 16byte. 6byte ID pulic
không thay đổi và được sử dụng để kết hợp một thẻ Yubikey với một tài
khoản. Cuối cùng, toàn bộ 22byte (16byte được mã hóa với 6byte ID) sẽ
được mã hóa bằng cách sử dụng thuật toán ModHex.
Yubico chọn ModHex vì nó giới hạn số kí tự phổ biến với các loại bàn
phím bố trí khác nhau. Bởi vì Yubikey đóng vai trò như một bàn phím, nó
cố gắng sử dụng các kí tự làm việc với các thiết lập bàn phím khác nhau
mà nó gặp. ModHex mã hóa có phần không hiệu quả ở chổ nó yêu cầu 2 kí
tự cho mỗi byte nó mã hóa, đó là lí do vì sao chuỗi 22byte thành chuỗi 44
kí tự. Tuy nhiên vì không cần đánh chữ cho Yubikey nên không có gì bất

tiện cho người dùng)
15
Hình 8: cấu trúc Yubikey Token
III. LÀM THẾ NÀO THÊM OTP VÀO HỆ THỐNG RIÊNG CỦA
MÌNH?
Chúng ta hãy xem xét kỹ hơn các bước mã hóa tạo ra các token. Ngược lại với
thuật toán bất đối xứng được sử dụng trong chương trình mã hoá khoá công khai
(chẳng hạn như PGP, AES) là một thuật toán đối xứng. Điều này có nghĩa cả hai
bên mã hóa các token và các bên giải mã và xác thực nó sẽ cần truy cập vào
AES-128 key. Điều này đã được lập trình trước cho thiết bị. Tương tự như ID
duy nhất của thiết bị, các AES-128 key duy nhất được tạo ra và lưu trữ trên thiết
bị của Yubico trước khi nó được đưa ra thị trường. Yubico duy trì một cơ sở dữ
liệu, nơi ID public cũng như ID bí mật tương ứng với các AES key. Bằng cách
này, Yubico có thể cung cấp một dịch vụ chứng thực Web.
Sử dụng một thuật toán đối xứng có lợi thế là nó rất nhanh. Ngoài ra, bạn không
cần dựa vào các bên thứ ba để quản lý key hoặc để bảo đảm identities.
Nếu bạn muốn chịu trách nhiệm về AES key của bạn, bạn có hai lựa chọn. Trước
tiên, bạn có thể yêu cầu AES key của bạn từ Yubico. Lúc này, Yubico sẽ gửi cho
bạn một đĩa CD có chứa AES key, yubico cũng có một giải pháp thuận tiện hơn
đó là cho phép nhận key online. Thứ hai, bạn có thể sử dụng development kit của
Yubico để lập trình cho key của chính mình. Bằng cách này, bạn có thể gán AES-
128 key, cũng như ID public và ID bí mật, theo quy ước đặt tên của riêng bạn.
Nếu bạn bổ sung phương pháp này bằng cách chạy dịch vụ xác thực Web của
riêng bạn, bạn loại bỏ bất kỳ sự phụ thuộc vào Yubico như là một bên thứ ba
trong thủ tục xác thực của bạn.
Quá trình xác thực một OTP ngược lại các bước cần thiết để xây dựng một OTP.
Trước tiên, bạn giải mã chuỗi ModHex. Tiếp theo, bạn chia chuỗi thành ID
16
public và 16byte token. Sau đó, bạn sử dụng ID public để tìm AES key tương
ứng. Sau khi sử dụng AES key để giải mã, bạn có 16byte token gốc. Tiếp theo,

bạn sẽ xác nhận tổng kiểm tra CRC-16 (hai byte cuối). Sau đó, bạn sẽ so sánh ID
bí mật với ID bạn lấy từ cơ sở dữ liệu bằng cách sử dụng ID public. Sử dụng
session counter và session token counter, hãy chắc chắn rằng token hiện tại được
tạo ra sau lần xác thực token thành công cuối cùng. Mặc dù bạn không biết chính
xác khi nào hai token bất kì được tạo ra, bạn luôn có thể biết thứ tự mà chúng
được tạo ra. Nếu token đi qua tất cả các bước kiểm tra này, bạn có thể gửi một tín
hiệu xác thực thành công cho client. Nếu không, token bị từ chối.
Tùy chọn, bạn có thể làm thuật toán xác thực mạnh hơn. Ví dụ, bạn có thể thử
tính toán có bao nhiêu sessions hoặc tokens đã được bỏ qua kể từ lần xác thực
thành công cuối cùng và xem xét thông tin đó trong các quyết định của bạn để
xác nhận hoặc từ chối các token. Bạn có thể sử dụng session timestamp một cách
tương tự.
Yubico cung cấp tất cả các phần mềm ở dạng mã nguồn mở. Yubico cung cấp
các thư viện client cần thiết cho việc thực hiện chứng thực Yubikey trong các ứng
dụng và nền tảng khác nhau. Hiện nay, có thư viện client có sẵn trong Java, C, C
# / NET, PAM, PHP, Ruby, Perl và Python…
Khi bạn đặt mua một Yubikey, nó đi kèm theo những thuận lợi của dịch vụ
chứng thực Web của Yubico. Vì Yubico duy trì cơ sở dữ liệu của tất cả các API
key, cũng như ID public và ID bí mật mà các Yubikey đã được lập trình trước khi
giao hàng, Yubico đã quyết định cung cấp một dịch vụ chứng thực web đưa ra
những thông tin quan trọng đó. Các nhà phát triển có thể sử dụng dịch vụ chứng
thực web Yubico để xác nhận OTPs từ thiết bị. Yubico có một trang web nơi bạn
có thể yêu cầu một API key. Bất cứ ai cũng có thể nhận được một API key. Yêu
cầu duy nhất là bạn phải đưa ra một Yubikey OTP hợp lệ. Đây chỉ là một biện
17
pháp để tránh làm quá tải cơ sở dữ liệu từ quá nhiều yêu cầu không có thật. API
key cũng đi kèm với một ID number. Mục đích của API là kí/xác minh các yêu
cầu tới/từ dịch vụ web xác nhận bằng cách sử dụng thuật toán băm HMAC-
SHA1.
Thêm Yubikey authentication vào Typo

Ta thêm Yubikey authentication vào một ứng dụng hiện có.
Typo được phát triển bằng cách sử dụng “Ruby on Rails”, có thể kiểm tra mã
mới nhất của nó thông qua nguồn Subversion public của một project.
Để bắt đầu, ta thả thư viện ứng dụng các dịch vụ Ruby Web yubico.rb vào thư
mục lib của project. Sau khi thêm các lệnh yêu cầu tương ứng với file
config/environments.rb, chúng ta có thể chắc rằng thư viễn đã có trong ứng
dụng.
Hình 9: Yubikey OTP Validation Flow
18
Cần 2 nhóm cài đặt để cấu hình Yubikey authentication. Đầu tiên, thiết lập site-
wide, cụ thể là các khoa API và ID tương ứng cần thiết để gửi yêu cầu xác thực
cho dịch vụ web.
Cũng có một switch để enabling và disabling Yubikey authentication ở mức
blog-wide. Typo lưu trữ các chi tiết blog này một cách tuần tự và không tạo bất
kì sự thay đổi cơ sở dữ liệu nào. Tuy nhiên, chúng ta phải sửa đổi giao diện và
mô hình dữ liệu dùng để lưu trữ các cài đặt này trong ứng dụng. Ví dụ 1 sẽ cho
thấy làm thế nào add 3 tùy chọn cấu hình Yubikey vào template HTML tương
ứng trong giao diện người dùng. Tương tự như vậy, trong VD2 cho thấy cách
thêm các thiết lập tương tự với mô hình.
Listing 1. Typo: Blog-Wide Yubikey Settings HTML
filename: app/views/admin/settings/index.html.erb

<! Yubikey authentication - start >
<fieldset id="authentication" class="set"
style="margin-top:10px;">
<legend><%= _("Authentication")%></legend>
<ul>
<li>
<label class="float"><%= _("Require Yubikey
OTP")%>:</label>

<input name="setting[yubikey_required]"
id="yubikey_required" type="checkbox"
value="1"
<%= 'checked="checked"' if
this_blog.yubikey_required%> />
<input name="setting[yubikey_required]"
type="hidden"
19
value="0" />
</li>
<li>
<label for="yubikey_api_id"
class="float"><%= _("Yubico API ID")
%>:</label>
<input name="setting[yubikey_api_id]"
id="yubikey_api_id"
type="text" value="<%=h
this_blog.yubikey_api_id %>"
size="6" />
</li>
<li>
<label for="yubikey_api_key"
class="float"><%= _("Yubico API Key")
%>:</label>
<input name="setting[yubikey_api_key]"
id="yubikey_api_key" type="text"
value="<%=h this_blog.yubikey_api_key
%>" size="50" />
</li>
</ul>

</fieldset>
<! Yubikey authentication - end >

Listing 2. Typo: Adding Blog-Wide Yubikey Settings to Model
filename: app/model/blog.rb

20
# Authentication
setting :yubikey_required, :boolean, false
setting :yubikey_api_id, :string, ''
setting :yubikey_api_key, :string, ''

Hình 10: Blog-Wide Yubikey Settings UI
Sau đó, có 2 thiết lập user-specific: Yubikey ID và Yubikey Required. Vấn đề
trước là phải liên kết một tài khoản Typo với ID Yubikey public duy nhất trong
khi sau này chỉ cho phép Yubikey authentication chọn lọc các tài khoản của họ.
Bây giờ hãy làm cho 2 tùy chọn có sẵn trong cài đặt tùy chọn của user với giao
21
diện quản trị của ứng dụng. Nhờ hỗ trợ của RoR’s ActiveRecord, chúng ta không
cần viết code để lưu những tùy chọn vào cơ sở dữ liệu.
Giờ chúng ta sẽ thêm yubikey_id và yubikey_required vào bảng người dùng bằng
cách tạo sự chuyển đổi (xem VD 3). Các di cư (migration) tạo trong VD3 được
sử dụng với bất kì cơ sở dữ liệu cơ bản nào mà typo hỗ trợ. (MyAQL,
PostgreSQL, SQLite).
Listing 4. Typo: Yubikey Settings Database Migration
filename:
db/migrate/071_add_yubikey_columns_to_user.rb:
class AddYubikeyColumnsToUser <
ActiveRecord::Migration
def self.up

add_column :users, :yubikey_id, :string,
:null => false, :default => ''
add_column :users, :yubikey_required,
:boolean, :null => false, :default
=> false
end
def self.down
remove_column :users, :yubikey_id
remove_column :users, :yubikey_required
end
end
22
Hình 11: Account-Specific Yubikey Configuration Options UI
Bây giờ chúng ta tập trung vào vấn đề chứng thực thực tế trong quá trình
đăng nhập. Trước hết, thêm trường vào Yubikey OTP để màn hình đăng
nhập với điều kiện là Yubikey authentication kích hoạt cho toàn bộ blog.
Lưu ý rằng chúng ta luôn phải hiển thị trường Yubikey OTP trong suốt quá
trình đăng nhập bởi vì cho đến khi user cung cấp username, chúng ta không
biết Yubikey authentication được yêu cầu cho một user cụ thể.
<hình 9: màn hình đăng nhập thay đổi>
Listing 4. Typo: Modified Login Form HTML
filename: app/views/shared/_loginform.html.erb:
<% form_tag :action=> "login" do %>
<ul>
<li>
<label for="user_login"><%= _('Username')
%>:</label>
<input type="text" name="user_login"
id="user_login" value=""/>
</li>

23
<li>
<label for="user_password"><%= _('Password')
%>:</label>
<input type="password" name="user_password"
id="user_password" />
</li>
<! Yubikey authentication - start >
<% if this_blog.yubikey_required %>
<li>
<label for="yubikey_otp"><%= _('Yubikey OTP')
%>:</label>
<input type="text" name="yubikey_otp"
id="yubikey_otp" />
</li>
<% end %>
<! Yubikey authentication - end >
<li class="r"><input type="submit" name="login"
value= "<%= _('Login') %> &#187;"
class="primary" id="submit" />
</li>
</ul>
<p><%= link_to
"&laquo; " + _('Back to ') +
this_blog.blog_name,
this_blog.base_url %></p>
<% end %>
Listing 5. Typo: Yubikey Authentication Part 1
24
filename: app/controllers/accounts_controller.rb:


def login
case request.method
when :post
self.current_user =
User.authenticate(params[:user_login],
params[:user_password])
# check whether Yubikey authentication is
required and perform
# authentication
if logged_in? &&
(!this_blog.yubikey_required ||
!self.current_user.yubikey_required ||

self.current_user.authenticate_yubikey(
this_blog,
self.current_user.yubikey_id,
params[:yubikey_otp]))
session[:user_id] = self.current_user.id
flash[:notice] = _("Login successful")
redirect_back_or_default :controller =>
"admin/dashboard",
:action => "index"
else
25

×