Quá trình đăng ký và xác thực

Một phần của tài liệu nghiên cứu tìm hiểu về mật mã sinh trắc (Trang 47 - 58)

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ã

G i a i đ o ạ n E - 3 : T ạ o m ã đ ị n h d a n h , t ạ o r t mã định danh id chìa khóa k 43 e ic . e k = e

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.

Giai đoạn E-1: Xử lý ảnh

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

A0

A0

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ị …

trình (3.4) và (3.5) ở trên để tính toán A0(u) và D0(u). Sau đó, tính e )(ui 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ừ e )(ui và R(u) theo

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 : (adsbygoogle = window.adsbygoogle || []).push({});

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 được từ bioscrypt. Chuyển c1(x) sang giai đoạn V-2 của quá trình xác thực để khôi phục lại khóa N-bit.

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ì

- Nếu là người tấn công thì

i (u) i (u) −i (u) −i (u) ≈ 1 ≠ 1

Giai đoạn V-2 : Thuật toán khôi phục

Hình 3.5 : Giải thuật khôi phục khóa

A1(x) ≈ A0(x), D1(x) ≈ D0(x) và e A1 . e A0

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 k1 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. (adsbygoogle = window.adsbygoogle || []).push({});

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

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

Một phần của tài liệu nghiên cứu tìm hiểu về mật mã sinh trắc (Trang 47 - 58)