Điểm:1

Các khóa được sử dụng trong mật mã được tạo ra như thế nào?

lá cờ ng

Có vẻ như có các khóa ở khắp mọi nơi trong mật mã. Từ những thứ như HMAC đến mã hóa (cả bất đối xứng và đối xứng).

Một chút tôi không hoàn toàn hiểu bây giờ là các khóa mật mã được tạo ra như thế nào? Tôi biết chúng phải là ngẫu nhiên, nhưng đó có phải là tất cả các thuộc tính cần thiết không?

Phương pháp tạo cũng khác nhau tùy thuộc vào trường hợp sử dụng? Ví dụ: phương thức tạo có khác nhau đối với các khóa được sử dụng trong HMAC so với các khóa được sử dụng như một phần của chữ ký không?

Thực hiện một số thao tác trên Google, tôi đã bắt gặp một số thuật ngữ liên quan đến khóa và số ngẫu nhiên. Ví dụ: PRNG, RNG, HKDF, VRF, PRP, PRF, v.v.

Vấn đề là, rất khó để tổng hợp tất cả các thông tin này để trả lời ngắn gọn các câu hỏi của tôi về các khóa mật mã. Chúng được tạo ra như thế nào? Cơ chế nào sẽ hoạt động trong quá trình tạo khóa, chúng không chỉ là các số ngẫu nhiên? và các trường hợp sử dụng nhất định có yêu cầu một số cách nhất định để tạo các khóa này không?

kelalaka avatar
lá cờ in
Từ khóa là chúng phải được chọn trong `Ngẫu nhiên thống nhất`. Than ôi, quá rộng và không có câu trả lời đơn giản; [Có vấn đề gì khi sử dụng /dev/urandom của Linux để tạo khóa mật mã?](https://crypto.stackexchange.com/q/85533/18298). Tôi đề nghị bạn tìm kiếm trang web của chúng tôi và tập trung vào một thời điểm.
kelalaka avatar
lá cờ in
Tôi đã tìm kiếm [tạo khóa](https://crypto.stackexchange.com/search?q=key+generation) và chúng tôi có 1.551 kết quả.
Điểm:4
lá cờ ng

Các khóa mật mã nói chung nên được tạo ngẫu nhiên một cách bí mật và thống nhất trong miền khóa của hệ thống mật mã; đó là trong tập hợp các khóa hợp lệ cho hệ thống mật mã. Điều gì làm cho khóa hợp lệ phụ thuộc vào hệ thống mật mã và thường là các tham số (thường bao gồm kích thước khóa).

Trong một số hệ thống mật mã, bao gồm hầu hết các hệ thống đối xứng, tập hợp các khóa hợp lệ chỉ đơn giản là tập hợp các chuỗi bit có kích thước bằng khóa, ví dụ: 192-bit cho AES-192.

Mọi thứ phức tạp hơn trong mật mã bất đối xứng. Một lý do là nó đã tạo ra một cặp khóa, bao gồm một khóa riêng tư bí mật và một khóa chung phù hợp. Một lý do khác là thường có một số ràng buộc toán học. Ví dụ, trong trường hợp tương đối đơn giản của ECDSA, một khóa riêng hợp lệ trong một số nguyên $d$ trong phạm vi $[1,n-1]$ ở đâu $n$ là thứ tự của máy phát điện $G$ của nhóm đường cong elip và khóa công khai phù hợp sau đó được lấy làm điểm đường cong elip $Q:=d\,G$. Mọi thứ phức tạp hơn đối với RSA.

Với miền khóa được xác định, vẫn còn phải giải thích cách nó tạo ra một khóa ngẫu nhiên thống nhất. Đơn giản nhất là tung đồng xu công bằng, lặp lại khi cần thiết (ví dụ: 192 lần cho AES-192). Chúng ta có cần tạo một số nguyên trong một phạm vi không $[a,b]$, có nhiều phương pháp khác nhau để thực hiện việc này từ việc tung đồng xu công bằng. Đơn giản nhất là tạo $\left\lceil\log_2(b-a+1)\right\rceil$ bit bằng cách tung đồng xu công bằng, tập hợp các bit thành một số nguyên $x$ mỗi quy ước nhị phân big-endian, tính toán $y=a+x$, sử dụng nó nếu $y\le b$, nếu không thì lặp lại quy trình.

Phương pháp này có thể được tự động hóa bằng cách sử dụng trình tạo số ngẫu nhiên mạnh bằng mật mã, chẳng hạn như /dev/urandom trong hầu hết các hương vị unix.

Có những giải pháp thay thế mà thay vào đó, nó sử dụng hàm dẫn xuất khóa, để tính toán khóa từ một khóa khác hoặc đôi khi từ một cụm mật khẩu đáng nhớ.

Điểm:1
lá cờ cn

Tôi biết họ phải ngẫu nhiên

Vâng, loại. Chính xác hơn, họ phải không thể phân biệt với ngẫu nhiên.

Mục tiêu khi chọn khóa là đối thủ (âkẻ xấuâ) sẽ không thể tìm thấy khóa. Vì đối thủ có thể biết hệ thống của chúng ta hoạt động như thế nào (Nguyên lý Kerckhoffs), chúng ta cần tìm cách tạo khóa không chỉ phụ thuộc vào tính toán xác định (mà kẻ thù có thể sao chép). Do đó, tất cả các khóa phải phụ thuộc vào thứ gì đó mà kẻ thù không biết. Một thứ như vậy được gọi là giá trị ngẫu nhiên âtrueâ.

Các giá trị ngẫu nhiên có thể được tạo bằng các quy trình vật lý không thể đoán trước khác nhau. Một thiết bị thực hiện một quá trình như vậy được gọi là một phần cứng hoặc trình tạo số ngẫu nhiên âtrueâ (HRNG hoặc TRNG). Gần như tất cả các điện thoại thông minh và PC hiện đại, cũng như ngày càng có nhiều thiết bị nhúng, bao gồm HRNG.

Khi một hệ thống đã được âgieoâ với một giá trị ngẫu nhiên thực sự, nó có thể sử dụng một phép tính xác định được gọi là trình tạo giả ngẫu nhiên an toàn bằng mật mã (CSPRNG) (viết tắt là trình tạo giả ngẫu nhiên) để tạo ra một luồng giá trị ngẫu nhiên thực tế vô hạn. Các giá trị này là ngẫu nhiên theo nghĩa là một đối thủ có khả năng tính toán hữu hạn không thể phân biệt chúng với các giá trị ngẫu nhiên âtrueâ. Trong ngữ cảnh mật mã, trình tạo ngẫu nhiên (RNG) là một CSPRNG được tạo bởi một HRNG.

đó là tất cả các thuộc tính cần thiết?

Mỗi khóa phải không thể phân biệt được với ngẫu nhiên, từ quan điểm của các đối thủ tiềm năng. Điều này có nghĩa là khóa được tạo ngẫu nhiên (như đã giải thích ở trên). Nhưng không phải tất cả các khóa đều được tạo ngẫu nhiên: một số khóa được tính toán một cách xác định từ hỗn hợp các khóa và đầu vào khác. Các quá trình như vậy được gọi là phái sinh khóa. HKDF là một ví dụ về hàm phái sinh khóa. Hàm giả ngẫu nhiên (PRF) có thể là khối xây dựng cho KDF. Ví dụ: khi hai máy tính giao tiếp qua một kênh được mã hóa, chúng thường lấy các khóa giống nhau từ một bí mật được chia sẻ.

âNgẫu nhiênâ, đối với một khóa, có nghĩa là càng gần càng tốt với sự ngẫu nhiên thống nhất giữa tập hợp các khóa có thể. Điều này có nghĩa là gì tùy thuộc vào loại khóa.

Nói chung, mã hóa đối xứng sử dụng các khóa chỉ là một mảng byte và do đó tạo ra một $n$khóa -bit chỉ có nghĩa là tạo $n$ bit ngẫu nhiên và gọi đó là khóa. Ví dụ, điều này đúng với mật mã khối như AES và Camellia, mật mã dòng như Chacha20, thuật toán MAC như HMAC và Poly1305, v.v.

Mã hóa bất đối xứng cổ điển sử dụng các khóa là các số có các thuộc tính nhất định và do đó, việc tạo các khóa như vậy có thể yêu cầu các phép tính bổ sung. Một cách chung để tạo khóa có thể được biểu diễn bằng một $n$chuỗi -bit là để tạo $n$ bit ngẫu nhiên, hãy kiểm tra xem đây có phải là khóa hợp lệ không và nếu không, hãy thử lại. (Điều này giả định rằng cách biểu diễn là duy nhất, tức là không có hai khóa giống hệt nhau có cùng cách biểu diễn.) Cách tiếp cận này hoạt động tốt đối với điển hình ECC khóa, trong đó khóa riêng là một số nằm giữa $1$$2^n - một$ với $a \ll 2^n$, vì vậy nó hoạt động tốt để tạo ngẫu nhiên $n$-bit chuỗi và giải thích nó như là một số giữa $0$$2^n-1$ và thử lại nếu bạn đạt một trong số ít giá trị không hợp lệ. Một số hệ thống mật mã khác, chẳng hạn như RSA, liên quan đến các quy trình tạo khóa phức tạp hơn nhiều, nhưng ngay cả như vậy, nó vẫn sử dụng "tạo chuỗi bit ngẫu nhiên" và "thử lại nếu giá trị không phù hợp" làm khối xây dựng.

Điểm:-2
lá cờ cn

Có vẻ như có các khóa ở khắp mọi nơi trong mật mã.

Và có vẻ như vậy. Tôi có rất nhiều, tôi phải đặt chúng trên Post-nó bị mắc kẹt vào màn hình của tôi.

Nhưng nếu bạn cần nhiều hơn số tiền có thể kiếm được bằng cách tung đồng xu, thì có những cỗ máy có thể làm được điều đó. Có những thứ như cái này, cái nàycái này. Chúng tạo ra sự ngẫu nhiên đến vô tận.

Tại sao bạn cần nhiều chìa khóa như vậy? Câu hỏi hay. Và có ba lý do: -

  1. Rõ ràng nếu bạn phải truy cập nhiều dịch vụ, bạn sẽ cần nhiều mật khẩu/khóa. Các chuyên gia CNTT thường có 100 mật khẩu/khóa. Bạn thường chọn mật khẩu từ kinh nghiệm sống của mình. Vì vậy, tên của kỳ nhông của tôi có trong hầu hết chúng (Trevor). Bảng tính rất hữu ích để quản lý việc này.

  2. Bạn không tin tưởng chính phủ rằng mật mã thông thường đã không bị phá vỡ thời gian đa thức. Bạn có thể muốn cuộn chìa khóa của mình sau mỗi 15 phút. Điều đáng ngạc nhiên là chỉ ~0,1 bit/giây entropy được tạo dễ dàng với tài nguyên tối thiểu.

  3. Bạn không tin tưởng chính phủ rằng mật mã thông thường đã không bị phá vỡ thời gian đa thức. Và vì vậy (như các dịch vụ ngoại giao [tại sao?]) bạn sử dụng đệm một lầnS. Điều đó yêu cầu một ký hiệu khóa thực sự ngẫu nhiên cho mọi ký hiệu văn bản gốc mà bạn gửi. Điều này về mặt thống kê không khác gì điểm 2.

chúng không chỉ là những con số ngẫu nhiên?

Không. Chúng chỉ là những số ngẫu nhiên có phân phối đồng đều. Nhưng, có khái niệm về độ phức tạp Kolgomorov. Điều đó có nghĩa là nguồn gốc của các con số là không xác định. Nó là duy nhất trên toàn cầu. Một lần nữa, dễ dàng đạt được nhưng đòi hỏi một số suy nghĩ. \dev\urandom là xác định vì vậy không thể được sử dụng cho điểm 3.


Cũng thấy phân phối khóa lượng tử tạo điều kiện trao đổi khóa an toàn giữa nhiều bên.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.