3.8.1 Quá trình đăng ký
Giai đoạn E-1: Xử lý ảnh, kết hợp một tập dấu vân tay đầu vào với một mảng ngẫu nhiên để tạo ra hai mảng đầu ra : Hstored(u) và c0(x).
Giai đoạn E-2 : Liên kết khóa(Key linking), dùng giải thuật liên kết hóa khóa mã k0 với mẫu c0(x)
Hình 3.1 Tổng quan quá trình đăng ký của mã hóa sinh trắc học
Mục đích của quá trình đăng ký là kết hợp khóa N-bits với dấu vân tay người dùng
để tạo ra Bioscrypt của người dùng.
Như trong hình vẽ, quá trình đăng ký cần 3 đầu vào là : tập dấu vân tay của người dùng, R(u) được tạo ngẫu nhiên và khóa mã k0 độ dài N-bits. R(u) được tạo ra bằng sử
dụng một bộ tạo số ngẫu nhiên ( random number generator – RNG). Chìa khóa k0 có thể
sử dụng một chìa khóa đã có được dùng làm đầu vào của giải thuật mã hóa sinh trắc, hoặc có thể sinh ra bởi RNG. Chú ý là khóa k0 và R(u) hoàn toàn độc lập với ảnh sinh trắc.
Hình 3.2 : Giai đoạn xử lý ảnh trong quá trình đăng ký
Như trong hình trên, quá trình xử lý ảnh sẽ tạo ra mẫu c0(x) để chuyển cho giai
đoạn E-2 ( giai đoạn liên kết khóa) và sinh ra Hstored(u) – hàm lọc lưu trữ trong bioscrypt. Những dấu vân tay T được thu nhận từ người sử dụng hệ thống ( khoảng 4 tới 6 ảnh được sử dụng), sau đó những ảnh này sẽ được thực hiện biến đổi Fourier và sử dụng phương trình (3.4) và (3.5) ở trên để tính toán A0(u) và D0(u). Sau đó, tính eiθA0(u)
từ A0(u) và liên hợp phức của nó. Tiếp theo ta tính được hàm lọc lưu trữ Hstored(u) từ eiθA0(u)và R(u) theo phương trình (3.10). Theo phương trình (3.8) ta tính được mẫu c0(x). Hstored(u) được lử trữ
vào bioscrypt, c0(x) làm đầu vào cho giai đoạn liên kết của quá trình đăng ký.
Giai đoạn E-2: Thuật toán liên kết
Thuật toán liên kết có nhiệm vụ kết hợp giữa mẫu đầu ra c0(x) với khóa k0 N-bits dựa trên bảng tra cứu (Lookup table), tạo ra và lưu trữ chúng vào bioscrypt để sử dụng cho việc khôi phục khóa trong quá trình xác thực.
Một điều quan trọng là trong quá trình này là sự sai khác giữa mẫu đầu ra c0(x) và mẫu cần kiểm tra c1(x), sự khác nhau này vì những sự thay đổi trong hàm lượng ẩm của ngón tay người sử dụng, định vị ngón tay trên thiết bị …
Có nhiều cách để liên kết k0 với c0(x) , trong luận văn này sẽ đề cập đến cách sử
dụng một cấu trúc lặp đơn giản đơn giản dùng để chỉnh sửa lỗi.
Hình 3.3 : Thuật toán liên kết khóa
Như trong hình trên, giải thuật sẽ chọn lọc lấy một mảng 64x64 ở giữa của c0(x), nhị phân hóa và chọn lọc những giá trị L để đại diện cho mỗi bits khóa. Việc này có mục
đích để cung cấp các thông số đầu vào để tạo ra mẫu đăng ký nhị phân. Tiếp theo là kết hợp phần số thực và số ảo được nhị phân hóa của c0(x) để tạo ra mẫu đăng ký có kích thước 128x64. Ví dụ: một mảng với 128 cột và 64 hàng, nếu phần tử a+bi xuất hiện ở vị
trí (x,y) của mảng 64x64 của c0(x), thì trong mẫu đăng ký phần số thực a sẽ xuất hiện tại vị trí (x,y) và phần sốảo b sẽ xuất hiện tại vị trí (x+64,y). Quá trình này làm chuyển đổi một mảng giá trị phức 64x64 thành một mảng giá trị thực 128x64. Mẫu đăng ký bây giờ
chứa đựng 8192 giá trị thực D được tạo ra từ các số thực a hay số ảo b tương ứng. Nhị
phân mỗi giá trị của mẫu đăng ký ta sẽ thu được mẫu đăng ký nhị phân dùng để liên kết với k0. Quy tắc nhị phân mẫu đăng ký:
d → 1 nếu d ≥ 0 d → 0 nếu d < 0
Giả sử bit đầu tiên của k0 có giá trị là 0. Chọn vị trí của L ở trong mẫu đăng ký nhị
phân mà có giá trị phần tử của nó bằng 0, ghi vào cột đầu tiên của lookup table. Tiếp tục quá trình này với các bits khác của khóa. Mỗi vị trí trong mẫu đăng ký nhị phân chỉ có thể đại diện cho một bit của chìa khóa. Cuối cùng Lookuptable sẽ bao gồm 128 cột mà mỗi cột chứa vị trí L trong mẫu đăng ký nhị phân.
Giai đoạn E-3: Tạo mã định danh
Một yêu cầu của giải thuật mã hóa sinh trắc học là khi một người tấn công vào hệ
thống sử dụng Bioscrypt thì giải thuật sẽ sinh ra một khóa sai. Trên thực tế, để tiện lợi cho hệ thống thì giải thuật sẽ không sinh ra một khóa sai mà thay vào đó sẽ sinh ra thông báo từ chối và chuyển tới cho hệ thống mật mã. Việc này sẽ tránh cho hệ thống lãng phí tài nguyên vào việc giải mã bằng khóa sai. Do đó, cần phải có kịch bản để kiểm tra khóa cho quá trình này. Rõ ràng chìa khóa k0 không thể lưu trữ trong bioscrypt để so sánh với khóa
được sinh ra bởi quá trình kiểm tra. Thay vào đó ta sẽ kết hợp mã hóa tiêu chuẩn và giải thuật băm để tạo ra mã định danh id0. Tương tự, quá trình kiểm tra sẽ sinh ra một mã định danh id1, sau đó so sánh hai id này với nhau để xác minh khóa được sinh ra trong quá trình kiểm tra có đúng hay không.
Một phương thức kiểm tra khóa thường dùng là sử dụng khóa k0 N-bit như là khóa mã để mã hóa S bit của dữ liệu. Sau đó dùng hàm băm một chiều để băm dữ liệu đã được mã hóa để tạo ra mã định danh id0. Lưu mã định danh vào trong Bioscrypt.
S bit được mã hóa có thể là S bit bất kỳ nào có trong quá trình đăng ký và xác thực. S bit này là khác nhau với mỗi người dùng để đảm bảo an toàn tối đa cho thủ tục kiểm tra khóa. Đểđảm bảo điều này ta sẽ sử dụng S bit ở hàm lọc lưu trữ Hstored(u) vì nó có ở trong cả quá trình đăng ký và quá trình xác thực. Ngoài ra còn vì Hstored(u) là tích số của dấu vân tay và mảng ngẫu nhiên nên nó khác nhau với mỗi người dùng. Do đó ta sẽ sử dụng S bits
đầu tiên của Hstored(u) làm dữ liệu đầu vào cho giải thuật mã hóa.
Việc chọn giải thuật mã hóa và hàm băm la độc lập với quá trình mã hóa sinh trắc học. Tiêu chí cho quá trình tạo ra mã định danh là đơn giản và tính an toàn cao. Ởđây có thể sử dụng mã hóa AES với độ dài khóa là 256 và hàm băm SHA-256.
Bảng tra cứu và id0 được thêm vào Hstored(u) để tạo thành Bioscrypt hoàn chỉnh, nó có thể lưu trữ trên bất cứ phương tiện lưu trữ bình thường hiện đang có trên thị trường.
3.8.2 Quá trình xác thực
Giai đoạn V-1: xử lý ảnh :
Lấy Hstored(u) từ bioscrypt, kết hợp với các dấu vân đầu vào để tạo thành c1(x) Giai đoạn V-2 : tìm chìa khóa :
Sử dụng giải thuật giải mã tìm chìa khóa k1 từ c1(x) Giai đoạn V-3 : kiểm tra khóa :
Kiểm tra k1 bằng cách tạo ra một mã định danh mới id1 và so sánh với id0 ở trên.
Hình 3.4 : Tổng quan quá trình xác thực của mã hóa sinh trắc học
Mục tiêu của quá trình là khôi phục khóa N-bit cho người dùng hợp lệ.
Như trong trình bày ở trên, tập các ảnh sinh trắc của người dùng sẽ kết hợp với Hstored(u), bảng tra cứu Lookup Table và id0 ở trong bioscrypt để khôi phục và kiểm tra khóa N-bit của người dùng.
Giai đoạn V-1 : Xử lý ảnh
Như trong hình trên, xử lý ảnh của quá trình xác thực cũng tương tự như quá trinh
đăng ký. Trước tiên lấy dấu vân tay T của người sử dụng, sau đó thực hiện biến đổi Fourier và tính A1(u) và D1(u). Dựa theo phương trình (3.9) tính c1(x) với Hstored(x) lấy
A0(u), D0(u) được tính từ dấu vân tay đầu vào trong quá trình đăng ký. A1(u), D1(u) được tính từ dấu vân tay đầu vào trong quá trình xác thực. Như vậy ta có: - Nếu là người sử dụng hợp lệ thì A1(x) ≈ A0(x), D1(x) ≈ D0(x) và eiθA1(u) . e−iθA0(u) ≈ 1 - Nếu là người tấn công thì A1(x) ≠ A0(x), D1(x) ≠D0(x) và eiθA1(u) . e−iθA0(u) ≠ 1
Giai đoạn V-2 : Thuật toán khôi phục
Thuật toán khôi phục chịu trách nhiệm chính trong việc khôi phục khóa ngẫu nhiên (đã được ẩn vào trong lookup table trong quá trình đăng ký) từ mẫu c1(x) trong quá trình xác thực. Giải thuật khôi phục khóa sẽ sử dụng hàm lọc lưu trữ Hstored và Lookup Table đã
được lưu trữ trong bioscrypt và mẫu c1(x) lấy được từ quá trình xác thực. Các bước dưới
đây sẽ mô tả chi tiết từng bước của quá trình khôi phục khóa N – bit liên kết với c0(x) sử
dụng giải thuật liên kết đã đề cập phía trên. Giải thuật khôi phục khóa:
1. Lấy một mảng kích thước 64x64 ở giữa c1(x).
2. Tương tự giai đoạn E-2, kết hợp số thực và số ảo để tạo ra mẫu kiểm tra 128x64, nhị phân hóa mẫu này sẽ tạo thành mẫu xác thực nhị phân – tương ứng với mẫu
đăng ký nhị phân.
3. Sử dụng bảng tra cứu để lấy ra các bit cần thiết trong mẫu xác thực nhị phân để tạo khóa. Định nghĩa k1 như là một vector N-thành phần. Với phần tử thứ n của k1, cộng tổng các bit L của mẫu xác thực nhị phân có chỉ sốở trong cột n của bảng tra cứu. Nếu tổng các bit đó lớn hơn L/2 thì phần tử thứ n của k1 bằng 1, nếu tổng các bit đó nhỏ hơn hoặc bằng L/2 thì phần tử thứ n của k1 bằng 0. Hay nói cách khác, dùng quy tắc đa sốđể gán giá trị cho bit thứ n của k1.
4. Xác định tính hợp lệ của khóa khôi phục được. Quá trình này sẽđược mô tả ch tiết
ở giai đoạn V-3.
5. Nếu k1 tìm được là đúng, đưa ra khóa k1. Nếu k1 sai, trở lại c1(x) và lấy một mảng 64 x 64 khác cách vị trí cũ 1 pixel. Tiếp tục quá trình từ bước 2 tới bước 5 với tất cả phần 64 x 64 có vị trí bắt đầu cách vị trí trung tâm nhỏ hơn 16 pixel. Nếu bất kỳ
vị trí nào mà khóa khôi phục được xác minh là đúng thì ngừng quá trình và đưa ra kết quả là khóa k1. Trong trường hợp còn lại, nếu tất cả các vị trí đều là khóa sai thì
đưa ra thông báo từ chối.
Chú ý rằng, trong bước 5 của giải thuật khôi phục khóa đòi hỏi những mảng 64x64
được lấy ra từ dấu vân tay trong quá trình đăng ký và xác thực phải không lệch vị trí quá nhiều. Thông thường, ta chỉ cần tìm ±16 pixel của kích thước 128x128. Trong khoảng này, nếu không có vị trí nào trùng khớp thì quá trình sẽđược dừng lại, không cần tiếp tục kiểm tra thêm nữa.
Giai đoạn V-3 : Kiểm tra khóa
Bước 4 của giải thuật trên yêu cầu khóa k1 cần phải được kiểm tra tính hợp lệ. Khóa hợp lệ chỉ khi nó phù hợp hoàn toàn với khóa k0 ( trong quá trình đăng ký). Để kiểm tra tính hợp lệ của khóa k1, ta sẽ tính mã định danh id1 rồi so sánh id1 với id0 đã được lưu trữ
trong bioscrypt. Mã định danh id1 được tính tương tự id0 , trải qua các bước : - Coi k là khóa mã, mã hóa S-bit của hàm lọc lưu trữ.
- Sau đó băm dữ liệu mã hóa sẽđược id1.
- So sánh id1 với id0 , nếu id1=id0 thì k1=k0 tức là khóa tìm được là chính xác. Ngược lại nếu id1 ≠ id0 thì k1 ≠k0, hệ thống sẽ ra thông bào từ chối hay là thuật toán khôi phục sẽ tiếp tục quay lại bước 1 trong giai đoạn V-2 với một vị
trí khác.
3.9 Kết luận
Trong chương 3 chúng ta đã tìm hiểu về các thuật toán mã hóa sinh trắc, biết
được cấu trúc của hệ thống đăng ký khóa sinh trắc và hệ thống xác thực và truy xuất khóa. Cùng với đó là các công thức toán học, các bước thực hiện để xây dựng nên hệ thống mã hóa sinh trắc.
Qua chương này chúng ta cũng nhận thấy sự an toàn của khóa sinh từ các đặc trưng sinh trắc nói riêng cũng nhưảnh vân tay nói chung ở các điểm sau :
- Khóa sinh trắc có tính ngẫu nhiên rất cao ( do sự tham gia của hai dãy số ngẫu nhiên ở quá trình xử lý ảnh và mã hóa hàm lọc lưu trữ ), gây khó khăn lớn cho việc tấn công khóa. Điều này trái ngược với các khóa thông thường : thường là những từ khóa dễ nhớ, có liên quan tới bản thân hoặc người thân nên dễ tấn công hơn.
- Hệ thống sử dụng khóa sinh trắc có khả năng xác thực người sử dụng, chỉ có người sử dụng hợp lệ mới có thể sử dụng khóa. Những người sử dụng không hợp lệ ( không có dấu vân tay trùng khớp) không thể truy xuất khóa sinh trắc.
Đặc điểm này chính là sự khác biệt lớn nhất giữa hệ thống sử dụng khóa sinh trắc và hệ thống sử dụng khóa thường. Ở những hệ thống mật mã bình thường, bất kỳ ai nhập vào chuỗi khóa đúng ( kể cả kẻ tấn công khóa) cũng có quyền của chủ nhân của chúng.
CHƯƠNG 4 : XÂY DỰNG ỨNG DỤNG “MẬT MÃ SINH TRẮC”
4.1 Giới thiệu
Chương này sẽ tập trung vào việc mô tả chi tiết các thuật toán đã được sử dụng và kết quả thực thi của chúng. Nó mô tả các bước cần thiết để có thể tạo ra một khóa sinh trắc và sử dụng khóa sinh trắc đó vào việc mã hóa. Chương trình được viết bằng ngôn ngữ
lập trình hướng đối tượng Java, với các form được thiết kếđơn giản, với hai chức năng là sinh khóa sinh trắc và mã hóa khóa sinh trắc, ngoài ra còn có các chức năng để thực thi một số thuật toán con như : lấy màu của từng pixel ảnh, biến đổi Fourier của một ma trận
ảnh, tính toán các sai lệch….
4.2 Các thuật toán được sử dụng
4.2.1 Xử lý ảnh
Mục đích của phần này là xử lý ảnh đăng ký và đưa ra được màu sắc của các điểm
ảnh. Chương trình ứng dụng xử lý ảnh đen trắng có kích thước 128 x 128 pixel, là ảnh của bộ scan vân tay thông thường. Trước tiên chúng ta sẽ tìm hiểu xem với ngôn ngữ lập trình Java, ảnh và các điểm ảnh được biểu diễn như thế nào?
Một bức ảnh số là một mảng dữ liệu 2 chiều của nhiều hạt ảnh ( pixels), chúng ta sẽ
gọi một hạt ảnh là một Pixel. Mỗi pixel chứa 3 số nguyên có giá trị từ 0 cho tới 255, 3 số
nguyên này mang 3 giá trị màu của màu đỏ, xanh lục và xanh dương trong pixel đó. Gọi r, g, b lần lượt là các giá trị màu của màu đỏ, xanh lục và xanh dương trong pixel. Nếu một pixel có 3 giá trị màu bằng nhau thì pixel đó có màu xám. Nếu giá trị r,g,b trong một pixel càng lớn thì pixel đó có màu càng sáng và ngược lại nếu r, g, b có giá trị càng nhỏ thì pixel có giá trị càng tối. Dưới đây là một số màu cơ bản :
R,G,B: ---> Màu: 0, 0, 0 ---> Đen
0, 0, 255 ---> Xanh dương (blue) 0, 255, 0 ---> Xanh lục (green) 255, 0, 0 ---> Đỏ (red)
0, 255, 255 ---> Xanh lam (cyan) 255, 255,0 ---> Vàng
255,0,255 ---> Tím 255,255,255 ---> Trắng.
Quá trình xử lý ảnh trong quá trình đăng ký sẽ đưa ra một ma trận các phần tử 0, 1 có kích thước 128 * 128. Ở đây, 0 biểu diễn điểm ảnh tương ứng có màu đen, 1 biểu diễn