Tôi biết điều này nghe có vẻ điên rồ, nhưng hãy nghe tôi nói. Theo dõi để Có thể sử dụng thẻ xác thực AES-GCM làm chức năng dẫn xuất khóa không?, mình cũng đang cân nhắc thêm sáng tạo các giải pháp để lấy các khóa thiết bị (đối xứng) duy nhất từ khóa gốc được lưu trữ an toàn.
(Cơ sở là chúng tôi có rất nhiều máy khách (=thiết bị) không thể sử dụng mật mã bất đối xứng (chủ yếu là do hạn chế về phần cứng). Để thiết lập kết nối TLS PSK, chúng tôi cần một bí mật chung giữa phụ trợ và máy khách. Thay vì lưu trữ an toàn khóa duy nhất cho mỗi ứng dụng khách trong phần phụ trợ, chúng tôi lấy khóa dành riêng cho ứng dụng khách từ bí mật gốc bằng cách sử dụng ID duy nhất của thiết bị.)
Động lực cho việc sử dụng các khóa RSA đến từ Chương trình định giá Azure Key Vault và sự sẵn có của HSM ở các khu vực khác nhau. Các thao tác phím đối xứng chỉ khả dụng dưới dạng "khóa nâng cao" trên HSM, nếu tôi đọc tài liệu chính xác và do đó đắt hơn 5 lần so với các thao tác RSA (ngoài tốc độ HSM theo bước). Hơn nữa, giới hạn đối với các khu vực được chọn (nơi có HSM được quản lý) cũng có thể là một yếu tố phá vỡ thỏa thuận.
Vì vậy, để thực hiện với ECC hoặc RSA, tôi có ý tưởng sau:
$\text{KDF}(key, data) = \text{SHA256}(\text{RSA-PKCS1v1.5-sign}(key, data))$
Nói cách khác: Lưu trữ khóa RSA không thể xuất được trong kho khóa và sử dụng sơ đồ chữ ký PKCS1 v1.5 xác định làm dẫn xuất khóa bằng cách sử dụng dữ liệu tùy ý làm giá trị dẫn xuất (ví dụ: muối được nối với id thiết bị). Để phá vỡ các thuộc tính đại số của RSA và tập trung vật liệu khóa xuống 256 bit, chữ ký được băm bằng SHA-256.
Theo trực giác, điều này là an toàn, vì chữ ký không thể giả mạo được và do đó không thể đoán được giá trị đầu ra cụ thể của thao tác ký (không có khóa). Vì vậy, ở đâu đó trong chữ ký này có đủ "entropy" (các bit không thể xác định được) để có khả năng phục hồi trước lực lượng vũ phu và "entropy" này sẽ được trải đều trong toàn bộ kết quả của hoạt động băm.
Một số người có thể đưa ra lý do chặt chẽ hơn (hoặc thậm chí là bằng chứng theo các giả định tiêu chuẩn) không?