Vân tay khóa công khai

Trong mật mã hóa khóa công khai**, vân tay khóa công khai** là một chuỗi byte ngắn được sử dụng để xác định khóa công khai dài hơn. Dấu vân tay được tạo bằng cách áp dụng hàm băm mật mã cho khóa công khai. Vì dấu vân tay ngắn hơn các phím mà chúng tham chiếu, chúng có thể được sử dụng để đơn giản hóa một số tác vụ quản lý khóa nhất định. Trong phần mềm của Microsoft, "thumbprint" được sử dụng thay cho từ "fingerprint".

## Tạo vân tay khóa công khai
Vân tay khóa công khai thường được tạo thông qua các bước sau:

# Khóa công khai (và tùy chọn một số dữ liệu bổ sung) được mã hóa thành một chuỗi byte. Để đảm bảo rằng cùng một dấu vân tay có thể được tạo lại sau đó, mã hóa phải có tính xác định và mọi dữ liệu bổ sung phải được trao đổi và lưu trữ cùng với khóa chung. Dữ liệu bổ sung thường là thông tin mà bất kỳ ai sử dụng khóa chung đều phải biết. Ví dụ về dữ liệu bổ sung bao gồm: phiên bản giao thức nào nên sử dụng khóa (trong trường hợp dấu vân tay PGP); và tên của người giữ khóa (trong trường hợp dấu vân tay neo tin cậy X.509, trong đó dữ liệu bổ sung bao gồm chứng chỉ tự ký X.509). 
# Dữ liệu được tạo ở bước trước được băm bằng hàm băm mật mã như SHA-1 hoặc SHA-2. 
# Nếu muốn, đầu ra của hàm băm có thể được cắt bớt để cung cấp vân tay ngắn hơn, thuận tiện hơn.

Quá trình này tạo ra một dấu vân tay ngắn có thể được sử dụng để xác thực khóa công khai lớn hơn nhiều. Ví dụ: trong khi khóa công khai RSA thông thường sẽ có chiều dài 1024 bit hoặc dài hơn, dấu vân tay MD5 hoặc SHA-1 điển hình chỉ có chiều dài 128 hoặc 160 bit.

Khi được hiển thị để kiểm tra con người, dấu vân tay thường được mã hóa thành chuỗi thập lục phân. Các chuỗi này sau đó được định dạng thành các nhóm ký tự để dễ đọc. Ví dụ: dấu vân tay MD5 128 bit cho SSH sẽ được hiển thị như sau: 
 43: 51: 43: a1: b5: fc: 8b: b7: 0a: 3a: a9: b1: 0f: 66: 73: a8

## Sử dụng vân tay khóa công khai để xác thực khóa
Khi một khóa công khai được nhận qua một kênh không tin cậy, chẳng hạn như Internet, người nhận thường muốn xác thực khóa chung. Vân tay có thể giúp thực hiện điều này, vì kích thước nhỏ của chúng cho phép chúng được chuyển qua các kênh đáng tin cậy nơi việc chuyển các khóa công khai không phù hợp.

Ví dụ: nếu Alice muốn xác thực khóa công khai là của Bob, cô ấy có thể liên lạc với Bob qua điện thoại hoặc gặp trực tiếp và yêu cầu anh ấy đọc dấu vân tay của mình cho cô ấy, hoặc đưa cho cô ấy một mẩu giấy với dấu vân tay được viết. Alice sau đó có thể kiểm tra xem vân tay đáng tin cậy này có khớp với vân tay của khóa chung không. Trao đổi và so sánh các giá trị như thế này dễ dàng hơn nhiều nếu các giá trị là vân tay ngắn thay vì các khóa công khai dài.

Vân tay cũng có thể hữu ích khi tự động trao đổi hoặc lưu trữ dữ liệu xác thực khóa. Ví dụ: nếu dữ liệu xác thực khóa cần được truyền qua giao thức hoặc được lưu trữ trong cơ sở dữ liệu trong đó kích thước của khóa chung là một vấn đề, thì trao đổi hoặc lưu trữ dấu vân tay có thể là một giải pháp khả thi hơn.

Ngoài ra, dấu vân tay có thể được truy vấn với các công cụ tìm kiếm để đảm bảo rằng khóa công khai mà người dùng vừa tải xuống có thể được nhìn thấy bởi các công cụ tìm kiếm của bên thứ ba. Nếu công cụ tìm kiếm trả về các lần truy cập tham chiếu dấu vân tay được liên kết đến (các) trang web thích hợp, người ta có thể cảm thấy tự tin hơn rằng khóa không bị kẻ tấn công tiêm vào, chẳng hạn như tấn công Man-in-the-middle.

PGP đã phát triển danh sách từ PGP để tạo điều kiện trao đổi dấu vân tay khóa công khai trên các kênh thoại.

## Vân tay công khai trong thực tế
Trong các hệ thống như SSH, người dùng có thể trao đổi và kiểm tra dấu vân tay theo cách thủ công để thực hiện xác thực khóa. Khi người dùng đã chấp nhận dấu vân tay của người dùng khác, dấu vân tay đó (hoặc khóa mà họ đề cập) sẽ được lưu trữ cục bộ cùng với bản ghi tên hoặc địa chỉ của người dùng khác, để có thể tự động xác thực các liên lạc với người dùng đó.

Trong các hệ thống như PKI dựa trên X.509, dấu vân tay chủ yếu được sử dụng để xác thực các khóa gốc. Các khóa gốc này cấp chứng chỉ có thể được sử dụng để xác thực khóa người dùng. Việc sử dụng chứng chỉ này giúp loại bỏ nhu cầu xác minh dấu vân tay thủ công giữa những người dùng.

Trong các hệ thống như PGP hoặc Groove, dấu vân tay có thể được sử dụng cho một trong các cách tiếp cận trên: chúng có thể được sử dụng để xác thực các khóa thuộc về người dùng khác hoặc khóa thuộc về cơ quan cấp chứng chỉ. Trong PGP, người dùng bình thường có thể cấp chứng chỉ cho nhau, tạo thành một mạng lưới tin cậy và dấu vân tay thường được sử dụng để hỗ trợ trong quá trình này (ví dụ: tại các bên ký kết khóa).

Trong các hệ thống như CGA hoặc SFS và hầu hết các mạng ngang hàng mã hóa, dấu vân tay được nhúng vào các định dạng tên và địa chỉ có sẵn (như địa chỉ IPv6, tên tệp hoặc các chuỗi nhận dạng khác). Nếu địa chỉ và tên đã được trao đổi thông qua các kênh đáng tin cậy, phương pháp này cho phép dấu vân tay cõng chúng.

Trong PGP, hầu hết các khóa được tạo theo cách sao cho cái được gọi là "ID khóa" bằng với 32 hoặc 64 bit thấp hơn tương ứng của vân tay khóa. PGP sử dụng ID khóa để chỉ các khóa công khai cho nhiều mục đích khác nhau. Đây không phải là dấu vân tay, vì độ dài ngắn của chúng ngăn chúng có thể xác thực một cách an toàn một khóa công khai. Không nên sử dụng id khóa 32 bit vì phần cứng hiện tại có thể tạo id khóa 32 bit chỉ trong 4 giây.

## Bảo mật dấu vân tay khóa công khai
Mối đe dọa chính đối với tính bảo mật của dấu vân tay là một cuộc tấn công tiền định, trong đó kẻ tấn công xây dựng một cặp khóa có khóa công khai băm vào dấu vân tay khớp với dấu vân tay của nạn nhân. Kẻ tấn công sau đó có thể xuất trình khóa công khai của mình thay cho khóa công khai của nạn nhân để giả trang thành nạn nhân.

Một mối đe dọa thứ cấp đối với một số hệ thống là một cuộc tấn công va chạm, trong đó kẻ tấn công xây dựng nhiều cặp khóa băm vào dấu vân tay của chính mình. Điều này có thể cho phép kẻ tấn công từ chối chữ ký mà anh ta đã tạo hoặc gây ra sự nhầm lẫn khác.

Để ngăn chặn các cuộc tấn công tiền mã hóa, chức năng băm mật mã được sử dụng cho dấu vân tay phải sở hữu thuộc tính kháng tiền giả thứ hai. Nếu các cuộc tấn công va chạm là một mối đe dọa, chức năng băm cũng sẽ sở hữu đặc tính chống va chạm. Mặc dù có thể cắt bớt đầu ra của hàm băm vì dấu vân tay ngắn hơn, dễ sử dụng hơn, dấu vân tay bị cắt phải đủ dài để bảo toàn các thuộc tính có liên quan của hàm băm chống lại các cuộc tấn công tìm kiếm brute force.

Trong thực tế, hầu hết các dấu vân tay thường được sử dụng ngày nay đều dựa trên băm MD5 hoặc SHA-1 không cắt ngắn. Kể từ năm 2017, các va chạm nhưng không phải là tiền đề có thể được tìm thấy trong MD5 và SHA-1. Do đó, tương lai có khả năng mang lại việc sử dụng ngày càng nhiều các hàm băm mới hơn như SHA-256. Tuy nhiên, dấu vân tay dựa trên SHA-256 và các hàm băm khác có độ dài đầu ra dài có nhiều khả năng bị cắt ngắn hơn (tương đối ngắn) dấu vân tay MD5 hoặc SHA-1.

Trong các tình huống phải giảm thiểu độ dài vân tay bằng mọi giá, bảo mật vân tay có thể được tăng cường bằng cách tăng chi phí tính toán dấu vân tay. Ví dụ: trong ngữ cảnh Địa chỉ được tạo bằng mật mã, đây được gọi là "Mở rộng băm" và yêu cầu bất kỳ ai tính toán dấu vân tay để tìm kiếm băm bắt đầu bằng một số cố định các số 0, được coi là một việc giải mã đắt đỏ. 
## Tham khảo