Công cụ dành cho nhà phát triển · Máy tính hàm băm SHA
Chứng chỉ và SSH Dấu vân tay: Cách SHA-256 Xác định Khóa công khai
· Lý lịch
sha-256 mật mã bảo vệ
Dấu vân tay là hàm băm của chứng chỉ hoặc khóa, đủ ngắn để đọc to. Bài đăng này giải thích cách tính toán dấu vân tay TLS và SSH, lý do SHA-1 dấu vân tay được thay thế và sự trùng khớp chứng tỏ điều gì.
Lời nhắc về khóa máy chủ mà bạn luôn chấp nhận — dòng SHA256: yêu cầu bạn so sánh
Khi bạn kết nối với máy chủ qua SSH lần đầu tiên, bạn sẽ thấy lời nhắc hỏi xem có chấp nhận khóa máy chủ hay không. Lời nhắc hiển thị dấu vân tay: `SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8` hoặc tương tự. Dấu vân tay này là hàm băm của khóa chung của máy chủ. Bạn đang được yêu cầu xác minh ngoài băng tần (bên ngoài giao thức SSH) rằng bạn nhận ra khóa này. Lời nhắc cũng thường hiển thị loại khóa (RSA, ED25519, ECDSA) và định dạng dấu vân tay. Nếu trước đây bạn đã nhìn thấy dấu vân tay của khóa này thông qua một kênh đáng tin cậy, bạn có thể tự tin gõ "có". Nếu không, việc chấp nhận có nghĩa là tin tưởng vào mạng để cung cấp khóa chính xác.
Dấu vân tay đơn giản là đầu ra của hàm băm mật mã được áp dụng cho khóa được mã hóa. Đối với SSH, khóa được mã hóa dưới dạng blob nhị phân (định dạng dây OpenSSH) và hàm băm được tính toán trên blob đó. Dấu vân tay ngắn hơn phím đầy đủ nên dễ đọc và gõ được. Cùng một dấu vân tay sẽ luôn được tạo ra từ cùng một khóa, vì vậy bạn có thể so sánh dấu vân tay được xuất bản ở nhiều vị trí hoặc nhiều kênh.
Dấu vân tay bằng hàm băm của mã hóa — chứng chỉ DER hoặc blob khóa công khai làm đầu vào
SSH khóa máy chủ và chứng chỉ TLS được mã hóa khác nhau nhưng nguyên tắc lấy dấu vân tay giống hệt nhau. Đối với SSH, dấu vân tay được tính toán từ vật liệu khóa chung. Đối với chứng chỉ TLS, dấu vân tay được tính từ toàn bộ chứng chỉ (bao gồm nhà phát hành, ngày hiệu lực và các trường khác). Khi bạn kết nối với máy chủ web, trình duyệt không hiển thị dấu vân tay chứng chỉ cho bạn vì TLS sử dụng mô hình tin cậy khác: trình duyệt tin cậy một nhóm tổ chức phát hành chứng chỉ (CA) được cài đặt sẵn và các CA đó xác nhận chứng chỉ. SSH không sử dụng CA được cài đặt sẵn; thay vào đó, bạn tin cậy các khóa cụ thể và lưu trữ chúng cục bộ trong `~/.ssh/known_hosts`.
Vì dấu vân tay bao gồm toàn bộ byte chứng chỉ cho TLS nên việc thay đổi ngày hiệu lực mà không ký lại sẽ dẫn đến một dấu vân tay khác. Đối với SSH, dấu vân tay chỉ thuộc về khóa chung nên dấu vân tay sẽ ổn định miễn là khóa không bị thay đổi.
Máy tính này thể hiện độ dài SHA-1 và SHA-256; Đề xuất chính sách vân tay yêu cầu nguồn giao thức
Trước đây, SSH dấu vân tay được hiển thị ở dạng MD5 thập lục phân. MD5 bị phá vỡ về mặt mật mã và xung đột là thực tế. Cộng đồng bảo mật đã chuyển sang SHA-256 dấu vân tay làm mặc định. Bạn vẫn có thể thấy cả hai định dạng được hiển thị bởi ứng dụng khách SSH của bạn: `SHA256: base64` và `MD5: hex`. Dấu vân tay SHA-256 là dấu vân tay đáng tin cậy để xác minh danh tính. Nếu bạn thấy cả hai, hãy so sánh phiên bản SHA-256 với dấu vân tay từ một nguồn đáng tin cậy (trang web của máy chủ, email đã ký từ quản trị viên, wiki nội bộ). Dấu vân tay MD5 kém tin cậy hơn vì tồn tại MD5 xung đột.
Sự thay đổi về định dạng dấu vân tay là dấu hiệu rõ ràng của quá trình chuyển đổi mật mã. Các phiên bản OpenSSH cũ hơn chỉ hiển thị MD5. Các phiên bản hiện đại hiển thị SHA-256 theo mặc định. Lệnh `ssh-keygen -l -f /path/to/key` hiển thị dấu vân tay của khóa ở định dạng mặc định cho phiên bản ssh-keygen của bạn; bạn có thể buộc định dạng cụ thể bằng cờ `-E` (ví dụ: `-E sha256` hoặc `-E md5`).
Cơ sở64 của SSH SHA256: định dạng — thay đổi mã hóa khiến dấu vân tay ngắn hơn hex
SSH dấu vân tay base64 sử dụng định dạng biến thể: chúng có tiền tố là tên thuật toán và dấu hai chấm, ví dụ: `SHA256:base64string`. Điều này khác với định dạng tính toàn vẹn của nguồn phụ (SRI), sử dụng dấu gạch nối và chỉ bao gồm base64 tiêu chuẩn. Định dạng SSH bao gồm một nhãn giúp xác định rõ ràng thuật toán nào tạo ra thông báo. Khi bạn nhìn thấy dấu vân tay ở đầu ra SSH, thuật toán luôn được hiển thị. Khi bạn thấy thuộc tính toàn vẹn SRI, thuật toán được mã hóa dưới dạng tiền tố có dấu gạch nối.
Đầu ra base64 từ máy tính băm ToolAcre SHA là dạng chuẩn; để khớp với SSH dấu vân tay, hãy thêm `SHA256: ` (tên thuật toán, dấu hai chấm và dấu cách). Dạng hex từ máy tính không phải là dạng SSH hiển thị, mặc dù nó thể hiện cùng một thông báo và có giá trị như nhau cho mục đích xác minh.
Sự trùng khớp chứng tỏ điều gì - rằng bạn giữ cùng các byte khóa mà bên kia đã xuất bản và không có gì về chủ sở hữu khóa nếu không kiểm tra ngoài phạm vi
Kết quả trùng khớp dấu vân tay chứng minh hai điều: thứ nhất, bạn giữ cùng byte khóa mà bên kia đã xuất bản và thứ hai, cả khóa và dấu vân tay đều không bị thay đổi kể từ khi tính toán thông báo. Nó không chứng minh danh tính của chủ sở hữu khóa hoặc ủy quyền cho bất kỳ hành động cụ thể nào. Việc xác minh dấu vân tay ngoài dải là điều kiện cần nhưng chưa đủ để tin cậy vào khóa. Bạn cũng phải xác minh rằng người đã công bố dấu vân tay chính là người mà họ tuyên bố.
Trong thực tế, nếu quản trị viên xuất bản dấu vân tay SSH của máy chủ trên mạng nội bộ của công ty hoặc trong email đã ký, bạn có thể xác minh nó khớp với lời nhắc bạn nhận được khi kết nối. Nếu dấu vân tay không khớp, bạn có thể tự tin từ chối kết nối vì ai đó đang chặn lưu lượng truy cập của bạn hoặc khóa máy chủ đã thay đổi. Nếu dấu vân tay trùng khớp thì bạn biết mình có đúng chìa khóa. Liệu khóa đó có thuộc về đúng máy chủ hay không là một câu hỏi riêng—bạn có thể trả lời bằng cách xác minh kênh xuất bản (trang mạng nội bộ có hợp pháp không? Email có thực sự đến từ tài khoản của quản trị viên đó không?).
Ví dụ đã hoạt động - xác minh dấu vân tay dựa trên dấu vân tay được xuất bản thông qua kênh đáng tin cậy, từng bước
Dấu vân tay chứng chỉ phục vụ cùng một mục đích: nó xác định duy nhất một chứng chỉ cụ thể. Nếu máy chủ TLS thay đổi chứng chỉ của nó (ví dụ: trong khi gia hạn), chứng chỉ mới có dấu vân tay khác. Ghim chứng chỉ—mã hóa cứng dấu vân tay hoặc một tập hợp nhỏ dấu vân tay có thể chấp nhận được trong ứng dụng—là một kỹ thuật bảo mật để phát hiện các thay đổi của chứng chỉ. Nếu máy chủ xuất trình chứng chỉ có dấu vân tay khác, ứng dụng sẽ từ chối chứng chỉ đó. Điều này bảo vệ khỏi việc CA bị xâm nhập cấp chứng chỉ gian lận mà trình duyệt đáng tin cậy.
Việc ghim chứng chỉ yêu cầu quản lý cẩn thận: nếu máy chủ cập nhật chứng chỉ của nó và bạn không lường trước được điều đó thì ứng dụng của bạn sẽ từ chối chứng chỉ mới hợp lệ. Thay vào đó, nhiều ứng dụng sử dụng tính năng ghim khóa chung, ghim khóa chung thay vì toàn bộ chứng chỉ. Điều này cho phép gia hạn chứng chỉ mà không bị từ chối miễn là sử dụng cùng một khóa.
Ví dụ đã hoạt động: xác minh bằng các công cụ nhận biết giao thức vì ToolAcre băm đã dán văn bản UTF-8 chứ không phải DER hoặc SSH byte dây
Việc tính toán dấu vân tay theo cách thủ công để xác minh rất đơn giản. Lưu chứng chỉ hoặc khóa vào một tệp, sử dụng `openssl dgst -sha256 filename` hoặc `ssh-keygen -l -f filename -E sha256` để hiển thị dấu vân tay và so sánh với dấu vân tay mà máy chủ đã hiển thị cho bạn. Công cụ tính hàm băm ToolAcre SHA cũng có thể tính toán tóm tắt nếu bạn dán các byte khóa nhưng hãy nhớ rằng máy tính băm UTF-8 văn bản bạn dán chứ không phải tệp nhị phân. Nếu khóa ở định dạng PEM (văn bản có tiêu đề `-----BEGIN CERTIFICATE-----` và byte được mã hóa base64), bạn có thể dán khóa đó vào máy tính. Nếu nó ở định dạng DER (nhị phân), trước tiên bạn cần sử dụng các công cụ dòng lệnh hoặc chuyển đổi sang PEM.
Ranh giới rất quan trọng: ToolAcre băm UTF-8 văn bản mà bạn dán vào giao diện máy tính. Nó không đọc các tệp từ thiết bị của bạn (tất cả tính toán đều có trong trình duyệt, trong tab của bạn, không có mạng). Nếu bạn có tệp khóa trên đĩa, bạn có thể mở tệp đó trong trình soạn thảo văn bản, sao chép văn bản và dán vào máy tính nếu nó ở định dạng PEM. Hoặc bạn có thể sử dụng các công cụ dòng lệnh như `openssl`, `ssh-keygen` hoặc `sha256sum` để tính toán hàm băm cục bộ.
Bài học rút ra: so sánh các dấu vân tay ngoài dải — máy tính băm ToolAcre SHA hiển thị các bản tóm tắt SHA-1 và SHA-256 trông như thế nào ở độ dài mà dấu vân tay sử dụng
Công cụ tính hàm băm ToolAcre SHA hiển thị các bản tóm tắt SHA-1 và SHA-256 cho bất kỳ kiểu nhập văn bản nào. Nếu bạn dán chứng chỉ ở định dạng PEM hoặc khóa công khai SSH thì máy tính sẽ tính toán cả hai kết quả tóm tắt. Đối với các khóa SSH, máy tính sẽ băm văn bản bạn dán; nếu bạn dán định dạng khóa công khai SSH được mã hóa base64 tiêu chuẩn thì thông báo sẽ không khớp với dấu vân tay SSH vì SSH áp dụng định dạng riêng của nó (định dạng dây) trước khi băm. Để đối sánh trực tiếp, bạn cần có khóa ở định dạng chính xác mà SSH sử dụng nội bộ, đây không phải là định dạng hiển thị công khai.
Đối với dấu vân tay chứng chỉ, hoạt động tương tự: nếu bạn dán văn bản chứng chỉ được mã hóa PEM, máy tính sẽ băm văn bản đó. Dấu vân tay của chứng chỉ được tính toán trên các byte chứng chỉ được mã hóa (định dạng DER), chứ không phải trình bao bọc văn bản PEM. Các byte giống nhau nhưng cách mã hóa văn bản thì khác. Để khớp dấu vân tay chứng chỉ từ OpenSSL hoặc trình xem chứng chỉ của trình duyệt, bạn cần cung cấp DER byte mà con người không thể đọc được. Mục đích của máy tính là băm văn bản UTF-8 mà bạn có thể dán và đọc, làm rõ ranh giới: nó băm văn bản nhập vào chứ không phải các tệp khóa mật mã ở dạng nhị phân hoặc giao thức dây tiêu chuẩn của chúng.