Điểm:28

Tại sao tuân thủ FIPS 140-2 gây tranh cãi?

lá cờ ng

Tôi đã đọc các bình luận của một bài báo về một triển khai mới được đề xuất của /dev/ngẫu nhiên trong Linux ngày nay, và ai đó đã nhận xét rằng thật khó chịu khi trải qua 43 lần sửa đổi mà vẫn chưa có bản vá của bạn. Một vài nhận xét xuống dòng và ai đó dường như ngụ ý rằng triển khai mới này sẽ tuân thủ FIPS 140-2và rằng điều này đang gây tranh cãi với "nhà phát triển của một mô-đun nhân VPN nổi tiếng" "chỉ sử dụng có chủ đích các thuật toán không được NIST phê duyệt" có "quan điểm mạnh mẽ chống lại việc tuân thủ FIPS cần thiết cho các trường hợp sử dụng của chính phủ".

Tại sao lại thế này? Điều gì gây tranh cãi về việc tuân thủ FIPS 140-2?

lá cờ ke
Một điều khác khiến những người thực hành trong lĩnh vực này khó chịu với FIPS (mặc dù có thể không phải trong ngữ cảnh `/dev/random`) là mã đã được kiểm tra để tuân thủ các tiêu chuẩn luôn nằm sau mã "mới nhất" -- nó sẽ thiếu các bản sửa lỗi, bao gồm các bản sửa lỗi bảo mật; và rất tốn kém để kiểm tra lại. Ngoài ra, tập hợp các bộ mật mã được FIPS chỉ định và các bộ mật mã thực sự được coi là phương pháp hay nhất để sử dụng trong thế giới thực sẽ không liên kết theo thời gian. Việc triển khai tuân thủ FIPS đã được kiểm tra -- của bất kỳ thứ gì -- là một triển khai _old_.
lá cờ pk
Một phần của nó được ám chỉ đến xa hơn. Để một hệ thống tuân thủ, không thể sử dụng các thuật toán và phương pháp không tuân thủ. Điều này không khó ở cấp hệ điều hành nền tảng. Ví dụ: trong Windows, khi chế độ FIPS được bật, không thể tạo hoặc sử dụng khóa mã hóa khối lượng tác nhân khôi phục văn bản thuần túy. Đối với các nhà phát triển ứng dụng, có thể không dễ dàng như vậy. Và bạn chỉ có thể sử dụng các thuật toán cũ hơn, có thể bỏ qua một số thuật toán mã hóa khung được quản lý (Java/.NET).
Điểm:33
lá cờ ng

tôi sẽ thêm vào câu trả lời khác: các Quy tắc chứng nhận FIPSÂ 140-2 cho RNG bị thiếu sót; và thông báo thay đổi FIPS 140-2 2 (tháng 12 năm 2002) đã loại bỏ phần tự kiểm tra. Chúng thực sự bị loại khỏi tiêu chuẩn, để lại chân không. Do đó, FIPS 140-2 quy định không có thử nghiệm thỏa mãn về mặt kỹ thuật đối với nguồn entropy, chưa bao giờ được thực hiện và đó là một vấn đề. Nó chỉ quy định điều kiện mã hóa đã được phê duyệt (hiện tại tôi không có bảo lưu kỹ thuật nào vì Dual_EC_DRBG đã hết).

Ban đầu, 4 bài kiểm tra được quy định (monobit, poker, running và long running) được quy định ban đầu để thực hiện theo yêu cầu của người vận hành (ở cấp độ 3) hoặc ở mỗi lần bật nguồn (cấp độ 4), cần có sự can thiệp thủ công nếu bài kiểm tra không thành công. Điều đó sai vì nhiều lý do:

  • Các mức độ chấp nhận rất nghiêm ngặt (nhiều hơn so với trong FIPS 140-1). Ngay cả với một máy phát điện hoàn hảo, các thử nghiệm sẽ thất bại trên thực địa với xác suất khá lớn, với sự can thiệp của con người bắt buộc. Điều này hoàn toàn không thể chấp nhận được trong một số ứng dụng, bao gồm Hệ điều hành, TPM, Thẻ thông minh. Bất cứ thứ gì được vận hành không giám sát đều không thể ở cấp độ 4 và cần phải có các biến dạng ở cấp độ 3 để biện minh cho điều "nhu cầu của người vận hành".
  • Nó không được chỉ định rằng các thử nghiệm này sẽ được chạy trên nguồn entropy không điều kiện. Do đó, thật hấp dẫn khi chạy thử nghiệm trên các số ngẫu nhiên dưới dạng đầu ra của một số khối điều hòa, điều này khiến cho các thử nghiệm phần lớn trở nên vô nghĩa: nếu nguồn entropy không điều kiện bị lỗi hoặc trở thành entropy thấp, thì thử nghiệm đầu ra có điều kiện sẽ không bắt được điều đó, trừ khi điều kiện có một lỗ hổng lý thuyết rất lớn.
  • Mức độ chấp nhận của một số bài kiểm tra (cụ thể là bài kiểm tra monobit và bài kiểm tra poker ở mức độ thấp hơn) sao cho một sai lệch nhỏ, hoàn toàn bình thường và vô hại đối với nguồn entropy không điều kiện, sau đó là điều kiện mã hóa thích hợp, sẽ gây ra tỷ lệ từ chối cao một cách thảm hại . Do đó, về cơ bản là không thể áp dụng các thử nghiệm trên vật liệu cần thử nghiệm.

Hai vấn đề cuối cùng vẫn còn với phần sau SP 800-22 Bản sửa đổi 1a Các thử nghiệm thống kê của NIST đối với RNG cho các ứng dụng mật mã (theo hiểu biết hạn chế của tôi, hiện được sử dụng trong quá trình chứng nhận). Toán của các bài kiểm tra là tốt. Nhưng như trên, các thử nghiệm rất nhạy cảm, do đó không thể sử dụng được trên nguồn entropy thực không điều kiện (các thử nghiệm thường thất bại), do đó chỉ có thể sử dụng ở đầu ra của nguồn có điều kiện, do đó không thể phát hiện ra các khuyết tật của nguồn nếu điều kiện tốt. Và không thể phát hiện một trình tạo cửa hậu thành thạo chỉ từ đầu ra của nó.

Vì vậy, các thử nghiệm này hoặc thất bại và mang lại sự đảm bảo tốt rằng vật liệu được thử nghiệm có thể phân biệt được với ngẫu nhiên, hoặc thành công và mang lại sự đảm bảo an toàn rõ ràng, ngay cả khi entropy của nguồn rất hạn chế hoặc điều kiện có cửa sau, cả hai điều này đều có thể cho phép một cuộc tấn công .

Những người ở NIST có năng lực và thật hợp lý khi tự hỏi liệu mục đích thực sự của những thử nghiệm này có phải là để tạo ảo giác về bảo mật hay không. Điều đó sẽ phù hợp với lịch sử lâu dài của Hoa Kỳ tích cực lén lút tiền điện tử suy yếu:

  • Công phu và kéo dài hàng chục năm thỏa hiệp của Swiss Crypto AG công ty đã bán các máy mật mã yếu đi một cách có chủ ý.
  • DES: một ấn phẩm của NSA, hiện đã được giải mật, thừa nhận rằng khóa 56-bit là kết quả của sự thương lượng giữa các nhà thiết kế muốn 64-bit (ít nhất: sao lục thiết kế có một tùy chọn cho các khóa 128-bit); và NSA, cố gắng áp đặt 48-bit để dễ bẻ khóa; xem cái này.
  • Kép_EC_DRBG đã đề cập trong câu trả lời khác: một nỗ lực có chủ ý (và tại thời điểm thành công) để cung cấp rộng rãi RNG, với thiết kế và tham số công khai, được bảo mật ngoại trừ đối với chính quyền Hoa Kỳ (hoặc bất kỳ ai quản lý để thay đổi khóa chung, chuyện gì đã xảy ra).
Điểm:31
lá cờ mc

Bởi vì trước đây đã có một trình tạo số ngẫu nhiên được NIST phê duyệt (Dual_EC_DRBG) đã được NSA bảo vệ và có một lỗ hổng thường được coi là một cửa hậu cố ý do NSA tạo ra. Điều này đã khiến một số người không tin tưởng vào bất kỳ thuật toán mã hóa nào của NIST. Rất nhiều bài báo trên mạng về điều này, đây là một của Schneier giải thích vấn đề một cách khá chi tiết.

lá cờ mg
Cá nhân tôi thấy điều này luôn có một chút phản ứng thái quá. Có, đã xảy ra sự cố với Dual_EC_DRBG. Nhưng chúng tôi vẫn sử dụng AES, SHA2 và sẽ sử dụng bất kỳ thứ gì giành chiến thắng trong cuộc cạnh tranh thuật toán hậu lượng tử. Điểm rút ra của tôi luôn là: đừng tin vào các tiêu chuẩn * một cách mù quáng *. Ý tôi là, các đường cong EC của brainpool cũng có một số hằng số kỳ quặc, nó vẫn tạo ra ít tiếng ồn hơn nhiều so với bất kỳ thứ gì phát ra từ NIST.
Swashbuckler avatar
lá cờ mc
@ D.Kovács Tôi hiểu quan điểm của bạn, nhưng đại đa số mọi người không có chuyên môn kỹ thuật để đánh giá các thuật toán tiền điện tử để tìm các sai sót (có chủ ý hay không) và do đó họ phải tin tưởng một cách mù quáng.
lá cờ za
@ D.Kovács Một nỗ lực có chủ ý nhằm làm suy yếu tiền điện tử không phải là một thất bại, đó là một cuộc tấn công. Ngoài ra, như câu trả lời của fgrieu đã đề cập, các bài kiểm tra FIPS 140-1 và 140-2 là thiếu sót. Do đó, chúng cũng có thể được coi là nỗ lực làm suy yếu hệ thống tiền điện tử của bạn bằng cách mang lại cho người dùng cảm giác an toàn sai lầm. Cuộc tranh cãi là kết quả của việc các nhà phát triển không tin tưởng một cách mù quáng vào các tiêu chuẩn -- như chính bạn đã đề xuất
user avatar
lá cờ in
@slebetman Bạn có bất kỳ sự thật nào để chứng minh cho tuyên bố rằng đó là cố ý không?
lá cờ za
Bản ghi nhớ @user NSA do Edward Snowden phát hành và được New York Times đưa tin chỉ ra rằng trường hợp Dual_EC_DRBG là một nỗ lực có chủ ý của NSA nhằm chèn một cửa hậu toán học (bằng cách giúp họ đoán các số ngẫu nhiên dễ dàng hơn) vào các tiêu chuẩn mã hóa.Tất nhiên, chúng tôi không có các tài liệu gốc bởi vì không giống như Wikileaks, Snowden đã không tiết lộ các tài liệu bí mật cho công chúng - chỉ cho báo chí. Tùy thuộc vào thời tiết của bạn, bạn muốn tin NYT hay NSA nhưng tiền của tôi là NSA là những kẻ nói dối - bởi vì đó là công việc của họ.
Mark avatar
lá cờ jp
@user, chúng tôi *không biết* rằng Dual_EC_DRBG ban đầu đã được NSA cài đặt cửa hậu, nhưng chúng tôi biết rằng những kẻ tấn công chưa được xác định danh tính [đã sửa đổi giá trị Q của Dual EC như được triển khai bởi Juniper Networks](https:// www.schneier.com/blog/archives/2016/04/details_about_j.html) để có được cửa hậu của riêng họ.
fgrieu avatar
lá cờ ng
@user: Cửa hậu của Dual_EC_DRBG rõ ràng là có chủ ý: thiết kế chỉ có ý nghĩa như vậy. Và có [một bằng sáng chế](https://worldwide.espacenet.com/textdoc?DB=EPODOC&IDX=US2007189527) nêu rõ ý định. Theo quan sát của tôi, các thử nghiệm RNG trong FIPS 140 và SP 800-22 có thể _cố ý_ cố gắng tạo ra cảm giác an toàn sai lầm chỉ là suy đoán, dựa trên thực tế là các thử nghiệm này không phải là bằng chứng hợp lệ về bảo mật (ví dụ: chúng cung cấp cho Dual_EC_DRBG một hóa đơn rõ ràng về Sức khỏe). Ngẫu nhiên, chúng được sử dụng làm đối số không có thật về bảo mật của RNG trong hàng chục, có lẽ hàng trăm ấn phẩm không đạt tiêu chuẩn.
Joshua avatar
lá cờ cn
@fgrieu: Đến lượt tôi đóng vai luật sư của quỷ. Giả sử bạn muốn xây dựng một RNG không bị rò rỉ một cách đáng tin cậy. Giả sử bạn đã làm như vậy bằng cách xây dựng một từ thuật toán mã hóa bất đối xứng làm rò rỉ trạng thái của nó với hiệu quả tối đa, sao cho không có entropy tự do để rò rỉ bất kỳ thứ gì khác, sau đó phá hủy khóa giải mã? Điều đó sẽ không chứng minh một RNG không bị rò rỉ trạng thái?
Điểm:7
lá cờ mx

Bạn có thể đưa ra lựa chọn tốt nhất có thể trong mọi trường hợp nếu bạn không phải tuân thủ FIPS 140-2. Nếu bạn phải tuân thủ FIPS 140-2, bạn chỉ có thể làm tốt nhất đã được phê duyệt sự lựa chọn. Do đó, việc tuân thủ FIPS 140-2 không bao giờ cho phép bạn đưa ra những lựa chọn tốt hơn và đôi khi buộc bạn phải đưa ra những lựa chọn tồi tệ hơn.

Giả sử bạn phải chọn giữa hai tùy chọn, một trong số đó được FIPS 140-2 phê duyệt và tùy chọn kia thường được cộng đồng mật mã coi là lựa chọn an toàn hơn nhiều. Bạn nên chọn cái nào?

Câu trả lời là bạn chắc chắn nên chọn cái được coi là an toàn hơn nhiều trừ khi bạn phải tuân thủ FIPS 140-2. Trong trường hợp đó, bạn phải sử dụng cái phù hợp.

Hoàn toàn tốt khi sử dụng các phương pháp được FIPS 140-2 phê duyệt khi chúng có ý nghĩa.Sự khác biệt duy nhất mà FIPS 140-2 tuân thủ tạo ra là nó buộc bạn phải đưa ra những lựa chọn tồi tệ hơn trong một số trường hợp.

fgrieu avatar
lá cờ ng
Có, FIPS 140-2 hạn chế điều kiện xác định có thể được sử dụng. Nhưng không giống như Dual_EC_DRBG, những thứ (vẫn) được phê duyệt rất đơn giản và ý kiến ​​​​của tôi (và nhiều người khác) là chúng không có nhiều cửa hậu hơn SHA-2 hoặc AES. Do đó, chỉ dựa trên nguyên tắc chứ không phải dựa trên cơ sở kỹ thuật mà chúng ta có thể muốn từ chối chúng. IMHO vấn đề kỹ thuật thực sự nhất với FIPS 140-2 là thiếu kiểm tra trực tuyến (kiểm tra tại hiện trường rằng nguồn entropy tốt). Có một số thử nghiệm như vậy, chúng bị lỗi kỹ thuật và thực sự [bị loại bỏ](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.140-2.pdf#page=65).
lá cờ mx
@fgrieu Tôi đã gặp trường hợp có lỗi trong sản phẩm được chứng nhận FIPS 140-2 rõ ràng đã làm tổn hại đến bảo mật và lựa chọn của tôi là sửa lỗi và mất chứng nhận FIPS 140-2 hoặc giữ cả lỗi và chứng nhận.
Điểm:1
lá cờ cn

Suy nghĩ của tôi quá dài để bình luận, vì vậy tôi sẽ tóm tắt chúng như một câu trả lời ...

Có một số vấn đề nghiêm trọng với hai câu trả lời còn lại, đến mức một số người trong chúng ta đã hiểu sai bài kiểm tra tính ngẫu nhiên là gì. Như các gạch đầu dòng: -

1. "không tin tưởng vào bất kỳ thuật toán mã hóa nào từ NIST". Không có thuật toán được tạo bởi NIST trong FIPS. Chắc chắn không có sự phức tạp nào của Dual_EC_DRBG. Bài kiểm tra chạy và bài xì phé không phải là thuật toán độc quyền của Bộ Thương mại Hoa Kỳ (NIST). Chúng là các đặc điểm toán học của một phân phối ngẫu nhiên thống nhất. Nếu tôi cho rằng số lượng dự kiến ​​​​sẽ là ~ 50%, điều đó có khiến tôi trở thành kẻ lật đổ không? Việc mở rộng giá trị trung bình của 0,5 với $n$ độ lệch chuẩn. $\mathcal{N}(\mu, \sigma^2)$ là hình thức tiêu chuẩn hóa cho bản phân phối đó và tôi không mong đợi bất kỳ điều gì không đầy đủ hơn. Kiểm tra các khối đầu ra lặp lại (Kiểm tra trình tạo số ngẫu nhiên liên tục) không phải là lật đổ, đó là lẽ thường.

2. Tôi có thể cung cấp bài kiểm tra FIPS này làm bằng chứng không: -

$cat /dev/urandom | thử nghiệm
rngtest 5
Bản quyền (c) 2004 của Henrique de Moraes Holschuh
Đây là phần mềm miễn phí; xem nguồn để biết điều kiện sao chép. KHÔNG có bảo hành; thậm chí không vì KHẢ NĂNG BÁN ĐƯỢC hoặc SỰ PHÙ HỢP CHO MỘT MỤC ĐÍCH CỤ THỂ.

rngtest: bắt đầu kiểm tra FIPS...
rngtest: bit nhận được từ đầu vào: 8310580032
rngtest: FIPS 140-2 thành công: 415198
rngtest: Lỗi FIPS 140-2: 331
rngtest: FIPS 140-2(2001-10-10) Monobit: 41
rngtest: FIPS 140-2(2001-10-10) Xì phé: 53
rngtest: FIPS 140-2(2001-10-10) Số lần chạy: 123
rngtest: FIPS 140-2(2001-10-10) Dài hạn: 115
rngtest: FIPS 140-2(2001-10-10) Chạy liên tục: 0
rngtest: tốc độ kênh đầu vào: (min=10,703; avg=1976,720; max=19073,486)Mibits/s
rngtest: Tốc độ kiểm tra FIPS: (min=75,092; avg=199,723; max=209,599)Mibits/s
rngtest: Thời gian chạy chương trình: 43724402 micro giây

Tỷ lệ thất bại là p=0,0008. Điều đó rất tương đương với ngưỡng p=0,001 trong bộ thử nghiệm SP800 STS và của người chăm chỉ: -

LƯU Ý RÕ RÀNG: Trên thực tế, (các) đánh giá cho rngs có thể hoàn toàn
  không chính xác hoặc gây hiểu nhầm. Cụ thể, giá trị p 'Yếu' sẽ xảy ra
  một thử nghiệm trong một trăm và giá trị p 'Không thành công' sẽ xảy ra một thử nghiệm trong
  một nghìn -- đó là ý nghĩa của p. Sử dụng chúng có nguy cơ của riêng bạn! Được cảnh báo!

Vì vậy, rõ ràng không gây tranh cãi.

3. "Không xác định rằng các thử nghiệm này sẽ được chạy trên nguồn entropy không điều kiện". Dĩ nhiên là không. Đúng rồi. Không ai có các đặc điểm thống kê cho các phân phối nguồn entropy không điều kiện. Chúng có đủ hình dạng và vị trí. Một số trong số chúng thậm chí không có tên toán học (mẫu nhật ký kép bình thường, MOD bồn tắm $x$ v.v.) Chúng tôi chỉ có thể chạy các bài kiểm tra thống kê được tiêu chuẩn hóa trên đầu ra cuối cùng có điều kiện.

4. "không thể phát hiện một trình tạo cửa hậu thành thạo chỉ từ đầu ra của nó". Một lần nữa, tất nhiên. Đó không phải là ý định của e.g. Thử nghiệm khởi động FIPS. Bạn cần lập trình viên và người viết mật mã cho điều đó. FIPS chỉ đơn giản là tự động hóa kiểm tra tính ngẫu nhiên và đưa ra các hướng dẫn cho lập trình bảo mật cơ bản như không có chuỗi ký tự để kiểm soát và mã có thể định vị lại. Tất cả đều rất bình thường.

Do đó, FIPS 140 không gây tranh cãi. Nói như vậy tương đương với việc nói rằng NIST đã mở cửa sau bản phân phối Bình thường hoặc công cụ cứng rắn đó là vô ích. FIPS không tuyệt vời ở một số thứ. Và thử nghiệm các khối 20.000 bit vừa vặn ở cuối thang đo để thử nghiệm tính ngẫu nhiên, ngay bên dưới nhập (500.000 bit).

poncho avatar
lá cờ my
"Không có thuật toán do NIST tạo ra trong FIPS"; trên thực tế, CTR_DRBG, HASH_DRBG và HMAC_DRBG được thiết kế bởi John Kelsey của NIST...
fgrieu avatar
lá cờ ng
Một số nhận xét đã được [chuyển sang trò chuyện](https://chat.stackexchange.com/rooms/131745/discussion-on-answer-by-paul-uszak-why-is-fips-140-2-compliance-controversial) để tiếp tục trao đổi thú vị này.
Paul Uszak avatar
lá cờ cn
@fgrieu Điều này xảy ra rất nhiều với tôi phải không.

Đă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.