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

TRÌNH BÀY VỀ VẤN ĐỀ XÁC THỰC (NHẬN DẠNG)

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 (196.45 KB, 13 trang )

ĐỀ TÀI: TRÌNH BÀY VỀ VẤN ĐỀ XÁC THỰC
(NHẬN DẠNG
MỤC LỤC
I. Vấn đề xác thực 2
II. Phân loại xác thực 2
II.1. Xác thực thực thể 2
II.1.1. Những gì người dùng biết 3
II.2. Xác thực dữ liệu 5
II.2.1. Xác thực thông điệp 5
II.2.2. Xác thực giao dịch 5
II.2.3. Xác thực khóa 6
II.2.4. Xác thực nguồn gốc dữ liệu 6
II.2.5. Xác thực bảo đảm toàn vẹn dữ liệu 6
VẤN ĐỀ XÁC THỰC (NHẬN DẠNG)
I. Vấn đề xác thực
Xác thực (Authentication Protocols) là một hành động thiết lập hoặc
chứng thực một cái gì đó (hoặc một người nào đó) đáng tin cậy, có nghĩa là,
những lời khai báo do người đó đưa ra hoặc về vật đó là đúng sự thật. Xác thực
một đối tượng còn có nghĩa là công nhận nguồn gốc của đối tượng, trong khi xác
thực một người thường bao gồm việc thẩm tra nhận dạng của họ. Việc xác thực
thường phụ thuộc vào một hoặc nhiều nhân tố xác thực để chứng minh cụ thể.
Trong an ninh máy tính, xác thực là một quy trình nhằm cố gắng xác minh
nhận dạng số của phần truyền gửi thông tin trong giao thông liên lạc, chẳng hạn
như một yêu cầu đăng nhập. Phần gửi cần phải xác thực có thể là một người
dùng sử dụng một máy tính, bản thân một máy tính hoặc một chương trình ứng
dụng máy tính.
Nói cách khác, xác thực thông tin là một quá trình nhằm đảm bảo một
người đang có ý định truy cập tới tài nguyên là đáng tin cậy.
Xác thực là một khâu đặc biệt quan trọng trong việc đảm bảo an toàn cho
hoạt động của hệ thống thông tin. Hệ thống luôn xác thực một thực thể trước
tiên khi nó cố thử thiết lập liên lạc. Khi đó nét nhận dạng của thực thể được


dùng để xác định sự truy nhập của nó như một đặc quyền hoặc để có được sự
sẵn sàng phục vụ.
II. Phân loại xác thực
Xác thực được chia làm hai loại chính: xác thực thực thể và xác thực dữ
liệu.
II.1. Xác thực thực thể
Xác thực thực thể (Entity Authentication) là xác thực định danh của đối
tượng tham gia vào giao thức truyền tin. Thực thể có thể là người dùng, thiết bị
đầu cuối. Một thực thể được xác thực bằng định danh của nó đối với thực thể
thứ hai trong một giao thức, và bên thứ hai đã thực sự tham gia vào giao thức.
Các nhân tố xác thực đối với thực thể là con người nói chung dựa vào 3
nhân tố sau:
2
- Những gì người dùng biết (Something Known)
- Những gì người dùng có (Something Prossessed)
- Những gì người dùng sở hữu bẩm sinh (Something Inherent)
II.1.1. Những gì người dùng biết
Chẳng hạn như mật khẩu, mật khẩu ngữ (pass phrase) hoặc số định danh
cá nhân (PIN), …
a. Xác thực dựa trên mật khẩu
Xác thực dựa trên User name và Password là cách xác thực cơ bản nhất.
Với phương thức này, khi người dùng đăng nhập vào hệ thống, hệ thống yêu cầu
người dùng nhập các thông tin username và password để xác thực, các thông tin
nhập vào được đối chiếu với dữ liệu lưu trữ trên cơ sở dữ liệu hệ thống, nếu
trùng khớp username và password, thì người sử dụng (User) được xác thực còn
nếu không thì người sử dụng bị từ chối hoặc cấm truy cập.
Phương thức này có tính bảo mật không cao vì thông tin xác nhận người
dùng được gửi đi xác thực trong tình trạng “plain text” (kí tự văn bản chuẩn),
tức là không được mã hóa và có thể bị chặn trên đường truyền. Lộ password do
đặt quá đơn giản (dạng „123456‟, „abc123‟ v.v.) hoặc dễ đoán (tên / ngày sinh

của người thân ). Ngoài ra, con người chỉ nhớ được một số lượng bản ghi hữu
hạn, họ phải nhớ mật khẩu của nhiều tài khoản khác nhau do đó họ chọn cách sử
dụng lại mật khẩu cho nhiều tài khoản khác nhau. Vì vậy nên những kẻ tấn công
dễ dàng truy cập tới tài khoản khác khi đã lấy được một tài khoản.
b. Giao thức Chứng thực bắt tay thách thức - Challenge Handshake
Authentication Protocol (CHAP)
Giao thức Chứng thực “Bắt tay Thách thức” là mô hình xác thực dựa trên
username/ password có cải tiến. Khi User cố gắng đăng nhập, server đảm nhiệm
vai trò xác thực sẽ gửi một thông điệp thử thách (challenge message) trở lại máy
tính user. Lúc này máy tính của User sẽ phản hồi lại username/ password được
mã hóa. Server xác thực sẽ so sánh phiên bản xác thực User được lưu giữ với
phiên bản mã hóa vừa nhận. Nếu trùng khớp, User sẽ được xác thực. Bản thân
password không bao giờ được gửi qua mạng.
3
Phương thức CHAP thường được sử dụng khi người dùng đăng nhập vào
các “remote servers” của công ty chẳng hạn như RAS server. Dữ liệu chứa
password được mã hóa gọi là mật khẩu băm (hash password). Một gói băm là
một loại mã hóa không có phương pháp giải mã.
II.1.2. Những gì người dùng có
Ví dụ như sở hữu khóa bí mật để ký điện tử, sở hữu thẻ từ (Magnetic-
striped Card), thẻ tín dụng (Credit Card), thẻ thông minh (Smart Card), chứng
minh thư (ID card), chứng chỉ an ninh (security token), chứng chỉ phần mềm
(software token) hoặc điện thoại di động (cell phone), …
a. Phương pháp xác thực Kerberos (Kerberos authentication)
Xác thực Kerberos là phương pháp dùng một Server trung tâm để kiểm tra
việc xác thực User và cấp phát thẻ thông hành (service tickets) để User có thể
truy cập vào tài nguyên hệ thống. Kerberos là một phương thức xác thực rất an
toàn nhờ việc dùng cấp độ mã hóa rất mạnh. Kerberos cũng dựa trên độ chính
xác của thời gian xác thực giữa Server và Client computer, do đó cần đảm bảo
kết nối đồng bộ thời gian giữa các thành phần của hệ thống. Kerberos là nền

tảng xác thực chính của nhiều OS như Unix, Windows…
b. Phương pháp Tokens
Tokens là phương tiện vật lý như các thẻ thông minh (smart cards), thẻ
đeo của nhân viên (ID badges) chứa thông tin xác thực. Tokens có thể lưu trữ
mã số nhận dạng cá nhân (Personal Identification Numbers - PIN), thông tin về
User, hoặc Password. Các thông tin trên token chỉ có thể được đọc và xử lý bởi
các thiết bịđặc dụng. Tokens chứa chuỗi text hoặc giá trị số duy nhất thông
thường mỗi giá trị này chỉ sử dụng một lần.
Ví dụ: smart card, là một thẻ nhựa có gắn một chip máy tính lưu trữ các
loại thông tin điện tử khác nhau, được đọc bởi đầu đọc thẻ smart card chuyên
dụng gắn trên máy tính, sau đó thông tin này được gửi đến “authenticating
server”.
4
II.1.3. Những gì người dùng sở hữu bẩm sinh
Ví dụ, vết lăn tay hoặc mẫu hình võng mạc mắt, chuỗi, mẫu hình về giọng
nói, sự xác minh chữ ký, tín hiệu sinh điện đặc hữu do cơ thể sống tạo sinh
(unique bio-electric signals), hoặc những biệt danh sinh trắc (biometric
identifier).
a. Phương pháp nhận dạng sinh trắc học (Biometrics)
Phương pháp nhận dạng sinh trắc học là mô hình xác thực có tính bảo mật
cao dựa trên đặc điểm sinh học của từng cá nhân. Quét dấu vân tay (fingerprint
scanner), quét võng mạc mắt (retinal scanner), nhận dạng giọng nói ( voice-
recognition), nhận dạng khuôn mặt (face-recognition).
Nhờ các tiến bộ vượt bậc của công nghệ sinh học phương thức xác thực
dựa trên nhận dạng sinh trắc học ngày càng trở nên phổ biến và được chấp nhận
rộng rãi. Chẳng hạn xác thực quét dấu vân tay hiện đã khá phổ biến trên các máy
tính xách tay và điện thoại di động. Tuy nhiên phương pháp này có chi phí triển
khai rất tốn kém nên chưa được sử dụng rộng rãi như các phương pháp xác thực
khác. Trên thực tế có những bằng chứng chỉ ra rằng những phương pháp này có
khả năng bị giả mạo. Thông tin cá nhân (đặc trưng riêng), người khác không có

được, nhưng với người chuyên nghiệp, thì các thông tin này có thể lấy được và
lưu trữ trước, sau đó làm giả mà hệ thông khó phát hiện được.
II.2. Xác thực dữ liệu
II.2.1. Xác thực thông điệp
Xác thực thông điệp (Message Authentication) hay Xác thực tính nguyên
bản của dữ liệu (Data Origin Authentication) là một kiểu xác thực đảm bảo một
thực thể được chứng thực là nguồn gốc thực sự tạo ra dữ liệu này ở một thời
điểm nào đó. Xác thực thông điệp bao hàm cả tính toàn vẹn dữ liệu, nhưng
không đảm bảo tính duy nhất và sự phù hợp về thời gian của nó.
II.2.2. Xác thực giao dịch
Xác thực giao dịch là xác thực thông điệp cộng thêm việc đảm bảo tính
duy nhất (Uniqueness) và sự phù hợp về thời gian (Timeliness) của nó. Xác thực
5
giao dịch liên quan đến việc sử dụng các tham số thời gian (TVB-Time Variant
Parameters).
Transaction Authentication = Message Authentication + TVB
Xác thực giao dịch “mạnh hơn” Xác thực thông điệp.
II.2.3. Xác thực khóa
+ Xác thực không tường minh khóa (Implicit Key Authentication): Một
bên được đảm bảo rằng chỉ có bên thứ hai (và có thể có thêm các bên tin cậy-
Trusted Parties) là có thể truy cập được khóa mật.
+ Khẳng định (Xác nhận) khóa (Key Confirmation): Một bên được đảm
bảo rằng bên thứ hai chắc chắn đã sở hữu khóa mật.
+ Xác thực tường minh khóa (Explicit Key Authentication) Bao gồm cả 2
yếu tố trên, nó chứng tỏ được định danh của bên có khóa đã cho.
Xác thực khóa tập trung vào định danh bên thứ hai có thể truy cập khóa
hơn là giá trị của khóa. Khẳng định khóa lại tập trung vào giá trị của khóa. Ta
gọi ngắn gọn Explicit Key Authentication là Key Authentication.
Chú ý: Xác thực dữ liệu đã bao gồm tính toán vẹn dữ liệu. Ngược lại thì
không.

+ Đảm bảo xác thực nguồn gốc dữ liệu phải đảm bảo tính toàn vẹn
dữ liệu.
+ Đảm bảo tính toàn vẹn dữ liệu không đảm bảo xác thực nguồn
gốc dữ liệu.
II.2.4. Xác thực nguồn gốc dữ liệu
Công cụ: Dùng chữ ký số, hàm băm, thủy vân ký.
II.2.5. Xác thực bảo đảm toàn vẹn dữ liệu
Công cụ: Dùng chữ ký số, hàm băm, thủy vân ký, mã xác thực.
6
III. Chương trình demo: Chữ ký Elgamal
Sơ đồ chữ ký Elgamal
1. Tạo cặp khóa (bí mật, công khai):
Chọn số nguyên tố p sao cho bài toán logarit rời rạc trong Z
p
là “khó” giải.
Chọn phần tử nguyên thủy g thuộc Z
p
*
, đặt P = Z
p
, A = Z
p
*
x Z
p-1
Chọn khóa bí mật a thuộc Z
p
*
, tính khóa công khai: h = g
a

mod p
 Tập khóa K = {p,g,a,h}
Công khai: p,g,h
Bí mật a
2. Ký số:
Dùng 2 khóa ký: Khóa a và khóa ngẫu nhiên bí mật r thuộc Z
p-1
*
Chữ ký trên x là s = Sigk(x,r) = (y,gama)
Trong đó:
y = g
r
mod p
gama = (x-a*y)*r
-1
mod (p-1)
3. Kiểm tra chữ ký:
Ver(x,y,gama) = đúng <=> h
y
* y
gama
= g
x
mod p
Chú ý: nếu chữ ký được tính đúng kiểm thử sẽ thành công vì:
h
y
* y
gama
= g

a*y
* g
r*gama
mod p
= g
(a*y + r*gama)
mod p = g
x
mod p
Do: gama = (x - a*y) *r
-1
mod (p-1)
Nên: (a*y + r*gama) = x mod (p-1)
7
Lập Trình (CODE)
// CODE CHÍNH
//Tọa cặp khóa, ký và kiểm tra chữ ký
//Tạo cặp khóa:
private void button1_Click(object sender, EventArgs e)
{
if (txt_p.Text == "" || txt_g.Text == "" || txt_a.Text == "")
MessageBox.Show("Bạn chưa nhập đủ 3 tham số p, g, a");
else
{
if((Int32.Parse(txt_a.Text)>Int32.Parse(txt_p.Text))||
(Int32.Parse(txt_g.Text)>Int32.Parse(txt_p.Text)))
{
MessageBox.Show("g và a không được lớn hơn p");
return;
}

// Kiem tra tinh nguyen to cua p;
if (HamThaoTac.KiemTraNguyenTo(Int64.Parse(txt_p.Text)) == 0)
{
MessageBox.Show("p không phải số nguyên tố");
return;
}
// Kiem tra tinh nguyen to cung nhau cua g va a voi p

if(HamThaoTac.UCLN(Int64.Parse(txt_g.Text),Int64.Parse(txt_p.Text))!
=1)
{
MessageBox.Show("g không phải số nguyên tố cùng nhau với p");
return;
}
if (HamThaoTac.UCLN(Int64.Parse(txt_a.Text), Int64.Parse(txt_p.Text)) != 1)
{
MessageBox.Show("a không phải số nguyên tố cùng nhau với p");
return;
}
// Tinh khoa cong khai h
BienToanCuc.h =
HamThaoTac.soMuTheoMod1(Int64.Parse(txt_g.Text),
Int64.Parse(txt_a.Text), Int64.Parse(txt_p.Text));
BienToanCuc.g = Int64.Parse(txt_g.Text);
BienToanCuc.a = Int64.Parse(txt_a.Text);
BienToanCuc.p = Int64.Parse(txt_p.Text);
txt_h.Text = BienToanCuc.h.ToString();
}
}
8

//ký số:
Int64 vanban;
//kiểm tra đã nhâp a và n chưa?
if (txt_khoabimat.Text == "" || txt_r.Text == "")
{
MessageBox.Show("Bạn phải nhập đầy đủ khóa bí mật a và số bí mật r");
return;
}
//Kiểm tra r có nguyên tố cùng nhau với p-1 k?
if (HamThaoTac.UCLN(Int64.Parse(txt_r.Text), (BienToanCuc.p - 1)) != 1)
{
MessageBox.Show("r không phải số nguyên tố cùng nhau với p - 1");
return;
}
BienToanCuc.r = Int64.Parse(txt_r.Text);
// tính phần tử nghịch đảo của r
Int64 nghichdao_r =
HamThaoTac.PhanTuNghichDao(Int64.Parse(txt_r.Text), (BienToanCuc.p - 1));
// Tạo chữ ký
try
{
FileStream FileVanBanStream = new FileStream(txt_fileCanKy1.Text,
FileMode.Open, FileAccess.Read);
FileStream FileChuKyStream = new FileStream(txt_FileChuKy1.Text,
FileMode.Create, FileAccess.ReadWrite);
FileStream FileHashStream = new FileStream(textBox1.Text,
FileMode.Create, FileAccess.ReadWrite);
//BinaryReader reader = new BinaryReader(FileVanBanStream,
Encoding.Unicode);
StreamWriter writer = new StreamWriter(FileChuKyStream,

Encoding.Unicode);
StreamWriter writer2 = new StreamWriter(FileHashStream,
Encoding.Unicode);

MD5 md = new MD5CryptoServiceProvider();
byte[] result = md.ComputeHash(FileVanBanStream);
writer2.WriteLine(BitConverter.ToString(result));
//long lenght = FileVanBanStream.Length;
int lenght = result.Length;
Int64 i;
string tmp_y,tmp_gama;
Int64 y, gama;
for (i = 0; i < lenght; i++)
{
vanban = result[i];

y = HamThaoTac.soMuTheoMod1(BienToanCuc.g, BienToanCuc.r,
BienToanCuc.p);
Int64 b1 = vanban % (BienToanCuc.p -1);
9
Int64 b2 = ((Int64.Parse(txt_khoabimat.Text) %(BienToanCuc.p -1))*(y%
(BienToanCuc.p-1)))%(BienToanCuc.p-1);
gama = (((b1 - b2)%(BienToanCuc.p-1))*(nghichdao_r%
(BienToanCuc.p-1)))%(BienToanCuc.p - 1);
if (gama < 0)
gama = gama + (BienToanCuc.p-1);
tmp_y = HamThaoTac.toBinary(y);
tmp_gama = HamThaoTac.toBinary(gama);
writer.WriteLine(HamThaoTac.Chuanhoachuoi(tmp_y) +
HamThaoTac.Chuanhoachuoi(tmp_gama));

writer.Flush();
}
MessageBox.Show("Đã ký xong!");
FileChuKyStream.Close();
FileVanBanStream.Close();
//reader.Close();
//writer.Close();
}
catch(Exception ex)
{
MessageBox.Show("lỗi đọc file");
}
}
10
//kiểm tra chữ ký:
private void button7_Click(object sender, EventArgs e)
{
if (txt_FileDauVao.Text == "" || txt_FileChuKy2.Text == "" ||
txt_KhoaCongKhai.Text == "")
{
MessageBox.Show("Bạn chưa nhập đủ thông số");
}
else
{
try
{
FileStream fileChuKyStream = new FileStream(txt_FileChuKy2.Text,
FileMode.Open, FileAccess.Read);
FileStream fileVanBanStream = new FileStream(txt_FileDauVao.Text,
FileMode.Open, FileAccess.Read);

StreamReader reader1 = new StreamReader(fileChuKyStream);
//BinaryReader reader2 = new BinaryReader(fileVanBanStream);
MD5 md = new MD5CryptoServiceProvider();
byte[] result = md.ComputeHash(fileVanBanStream);
//MessageBox.Show(result[1].ToString());
Int64 lenght = result.Length;
Int64 i, tmp_byte; string tmp_str, tmp_str1, tmp_str2;
Int64 y, gama,s1,s2;
for (i = 1; i <= lenght; i++)
{
tmp_byte = result[i-1];
if ((tmp_str = reader1.ReadLine()) == null)
{
MessageBox.Show("Chữ ký sai");
fileChuKyStream.Close();
fileVanBanStream.Close();
reader1.Close();
//reader2.Close();
return;
}
tmp_str1 = tmp_str.Substring(0, 15);
tmp_str2 = tmp_str.Substring(15);
y = HamThaoTac.toDecimal(tmp_str1);
gama = HamThaoTac.toDecimal(tmp_str2);
s1 =
(HamThaoTac.soMuTheoMod1(Int64.Parse(txt_KhoaCongKhai.Text), y,
BienToanCuc.p)*HamThaoTac.soMuTheoMod1(y, gama, BienToanCuc.p))%
BienToanCuc.p;
s2 = HamThaoTac.soMuTheoMod1(BienToanCuc.g, tmp_byte,
BienToanCuc.p);

if (s1 != s2)
{
MessageBox.Show("Chữ ký sai");
fileChuKyStream.Close();
11
fileVanBanStream.Close();
reader1.Close();
//reader2.Close();
return;
}

}
if ((tmp_str = reader1.ReadLine()) != null)
{
MessageBox.Show("Chữ ký sai");
return;
}
else
{
MessageBox.Show("Xác thực đúng chữ ký!");
fileChuKyStream.Close();
fileVanBanStream.Close();
reader1.Close();
//reader2.Close();
}
}
catch (Exception ex)
{
MessageBox.Show("Lỗi đọc file");
}

}
}
12
Tài liệu tham khảo:
[1] Giáo trình an toàn dữ liệu, PGS-TS. Trịnh Nhật Tiến, Đại học Công nghệ - ĐH
QGHN.
[2] Luận văn Nghiên cứu một số phương pháp xác thực thông điệp, URL:
/>thuc-thong-diep-46039/
13

×