it-swarm-vi.com

Các loại tiền điện tử thực tế và an toàn nhất cho các mật mã Mã đối xứng, Không đối xứng, Hash, Mã xác thực là gì?

Tôi quan tâm đến việc cập nhật hai câu hỏi được đưa ra cho năm 2011:

  1. Mật mã học nào là thích hợp nhất cho các thiết bị có công suất thấp (như điện thoại di động), nhưng vẫn hiệu quả?

  2. Mật mã nào an toàn nhất cho nhà phát triển .NET?

Vào tháng 11 năm '08 Rasmus Faber đã trả lời này câu hỏi Stack Overflow tương tự với câu trả lời này:

  • Mật mã đối xứng: AES-256

  • Mật mã bất đối xứng: RSA với khóa 4096 bit (tôi tin rằng đó là mức tối đa trong .NET) hoặc ECDSA với khóa bit 571 (nhưng điều đó chỉ được hỗ trợ trong .NET 3.5)

  • Băm: SHA-512

  • Mã xác thực tin nhắn: HMAC với SHA-512

Điều đó đang được nói, đó là quá mức cần thiết cho hầu hết các ứng dụng và bạn nên sử dụng tốt AES-128, RSA với khóa 2048 bit, SHA-256 và HMAC với SHA-256.

Những khuyến nghị này vẫn còn đúng ngày hôm nay?

24
goodguys_activate

Các khuyến nghị bạn trích dẫn là loại quá mức cần thiết. Một điểm cần lưu ý là vượt quá một mức nhất định (ví dụ: về kích thước khóa hoặc kích thước đầu ra của hàm băm), tất cả các chức năng đều "không thể phá vỡ với công nghệ có thể thấy trước" và thật khó để so sánh chúng. Nói rằng SHA-512 "mạnh hơn" SHA-256 có nghĩa là bạn đang tưởng tượng rằng SHA-256 có thể bị phá vỡ, điều mà theo như chúng ta có thể biết cho đến bây giờ và 40 năm tới, là không đúng (ngoài 40 năm , cố gắng hình dung công nghệ nào chúng ta có thể có rủi ro, 40 năm trước, không ai tưởng tượng được Internet như ngày nay, nhưng hầu hết mọi người đều cho rằng vào năm 2010, tất cả chúng ta sẽ lái ô tô bay).

AES-128 đã đủ an toàn và ít tốn kém hơn (AES-256 sử dụng 14 viên đạn, trong khi AES-128 sử dụng 10 viên đạn).

Khóa RSA bị hỏng lớn nhất hiện nay là một mô-đun 768-bit, và phải mất một số nỗ lực rất lớn (bốn năm và bộ não thực sự lớn). Khóa 1024 bit được coi là có thể sử dụng để bảo mật ngắn hạn, mặc dù các khóa lớn hơn được khuyến khích. Phím 2048 bit là phù hợp. Sử dụng khóa lớn hơn hai lần có nghĩa là gấp 8 lần công việc để ký hoặc giải mã, vì vậy bạn không muốn làm quá. Xem trang web này để biết khảo sát về độ dài khóa RSA có thể liên quan đến bảo mật.

ECDSA trên đường cong 256 bit đã đạt được mức bảo mật "không thể phá vỡ" (nghĩa là gần bằng mức AES với khóa 128 bit hoặc SHA-256 chống va chạm). Lưu ý rằng có các đường cong elip trên các trường nguyên tố và các đường cong trên các trường nhị phân; Loại nào hiệu quả nhất phụ thuộc vào phần cứng liên quan (đối với các đường cong có kích thước tương tự, PC sẽ thích các đường cong trên trường chính, nhưng phần cứng chuyên dụng sẽ dễ dàng xây dựng hơn với các trường nhị phân; CLMUL hướng dẫn về bộ xử lý Intel và AMD mới hơn có thể thay đổi điều đó).

SHA-512 sử dụng các hoạt động 64 bit. Điều này nhanh trên PC, không quá nhanh trên thẻ thông minh. SHA-256 thường là một thỏa thuận tốt hơn trên phần cứng nhỏ (bao gồm các kiến ​​trúc 32 bit như bộ định tuyến gia đình hoặc điện thoại thông minh).

Ngay bây giờ, các hệ thống RFID giá rẻ quá thấp để sử dụng bất kỳ điều nào ở trên (nói cách khác, các hệ thống RFID không thể rẻ như chúng có thể). Các hệ thống RFID vẫn sử dụng các thuật toán tùy chỉnh về bảo mật thường có vấn đề. Mặt khác, điện thoại di động có nguồn CPU đủ lớn để thực hiện mã hóa phù hợp với AES hoặc RSA (vâng, ngay cả điện thoại không thông minh giá rẻ).

38
Thomas Pornin

Câu trả lời được trích dẫn là phản hồi của tôi đối với an toàn nhất crypto trong .NET là gì.

khuyến nghị (cả cho các thiết bị có công suất cao và thấp):

  • Mật mã đối xứng: AES-128

  • Mật mã bất đối xứng: RSA với khóa 2048 bit hoặc ECDSA/ECDH với khóa 256 bit

  • Băm: SHA-256

  • Mã xác thực tin nhắn: HMAC với SHA-256

  • Mật mã luồng: AES-128 ở chế độ CTR

11
Rasmus Faber

Về mặt bảo mật, những khuyến nghị này vẫn còn hiệu lực và tôi cũng sẽ làm như vậy.

Đối với mật mã bất đối xứng, thực sự có ba điều bạn quan tâm: mã hóa, trao đổi khóa và chữ ký. RSA có thể là cả sơ đồ mã hóa và chữ ký, trong khi ECDSA đặc biệt là chữ ký. Tuy nhiên, cũng có các phiên bản đường cong elip của mã hóa và trao đổi khóa (không chắc chắn những gì trong miền công cộng). Điều đó nói rằng, kích thước tham số là như nhau cho cả ba.

Điều duy nhất khác là SHA-256/512 sẽ sớm được thay thế nhưng "sớm" trong trường hợp này sẽ là năm 2012.

Về năng lượng thấp, nó thực sự phụ thuộc vào mức năng lượng thấp. Nếu bằng điện thoại di động, bạn có nghĩa là một điện thoại thông minh, tất cả những điều này là thích hợp. Đối với một thẻ thông minh, RFID, mạng cảm biến, vv đó là một câu chuyện khác. Ngoài ra, hầu hết các thuật toán năng lượng thấp sẽ không có trong một thư viện tiêu chuẩn. Tuy nhiên tôi sẽ hướng bạn đến các kích thước tham số trong câu cuối cùng "không quá mức".

6
PulpSpy

Để bảo mật cho đến năm 2030, những người hiểu biết tại NIST khuyến nghị sử dụng ít nhất SHA-224, 2048 bit cho RSA hoặc DSA, EDCSA 224 bit và AES-128 hoặc 3 phím 3 phím.

Dựa trên công việc của họ, tính đến cuối năm 2010, chính phủ Hoa Kỳ đã từ chối các thuật toán này: SHA-1, RSA 1024 bit hoặc DSA, ECDSA 160 bit (đường cong elip), 80/112 bit 2TDEA (hai khóa ba DES )

Để biết thêm thông tin, hãy xem bài đăng này và các tài liệu NIST mà nó tham khảo: http://securitymusings.com/article/1587/alerskym-and-key-length-deprecation

6
nealmcb

Câu trả lời đúng về mật mã bởi Colin Percival năm 2009 vẫn còn khá nhiều cập nhật IMHO và bao gồm câu hỏi và nhiều hơn nữa.

5
Bruno Rohée

Đối với mật mã đối xứng, bạn có thể sử dụng AES-128 tốt hơn thay vì AES-256 do các điểm yếu có thể có trong lịch trình chính cho AES-256: http://www.schneier.com/blog/archives/2009/ 07/other_new_aes.html

2
Justin Clarke

Những gì chúng tôi đã làm là chọn một số phương thức mã hóa và băm và chuyển đổi tất cả đầu ra thành định dạng hex phổ biến. Dữ liệu nhạy cảm nhất của chúng tôi đang sử dụng SHA-256 và DES-3, trong khi dữ liệu ít nhạy cảm hơn có thể dễ dàng đoán được là sử dụng MD5 & RC4 và chúng tôi cũng đang sử dụng chuyển đổi thẳng XOR cho một số thứ. Mỗi mật mã đối xứng có mật khẩu riêng và tất cả dữ liệu được mã hóa được khóa bằng một tổng kiểm tra. Dựa vào một mã hóa cho mọi thứ đều nguy hiểm.

0
Dave