ĐẠ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
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ự
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ó
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ó
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.
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,
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>
</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
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') %> »"
class="primary" id="submit" />
</li>
</ul>
<p><%= link_to
"« " + _('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: