2015-09-29 10 views
5

Tôi đang sử dụng .net 3.5 và tôi đang cố gắng làm cho ứng dụng FIPS tuân thủ. Tôi không sử dụng bất kỳ thuật toán nào trong FIPS nhưng tôi vẫn nhận được lỗi khi tôi chạy nó trên máy chủ sản xuất.Làm cách nào để kiểm tra xem ứng dụng Asp.NET có sẵn là FIPS-ready

Triển khai này không phải là một phần của nền tảng Windows FIPS thuật toán mật mã được xác thực.

Đây là danh sách các thuật toán mà tôi đã kiểm tra và tôi chắc chắn rằng tôi chưa sử dụng chúng.

  • HMACMD5
  • HMACRIPEMD160
  • HMACSHA256
  • HMACSHA384
  • HMACSHA512
  • MD5CryptoServiceProvider
  • RC2CryptoServiceProvider
  • RijndaelManaged
  • RIPEMD160Managed
  • SHA1Quản lý

Làm cách nào để tìm chính xác vị trí của vấn đề hoặc ý tưởng nào khác?

+2

Cách cứng: đính kèm trình gỡ rối (OllyDbg) vào chương trình trước khi dừng và tìm bộ nhớ cho thư đó, sau đó đặt điểm dừng đọc bộ nhớ trên vị trí đó - nó sẽ tạm dừng bất cứ khi nào thư được truy cập, và bạn sẽ có thể thư giãn ngăn xếp và xem phương thức/lớp/mô-đun nào kích hoạt cảnh báo đó. Tuy nhiên, tôi không mong đợi một trình gỡ lỗi mã gốc sẽ rất tiết kiệm với mã được quản lý. –

Trả lời

2

Khi bạn nói "FIPS tuân thủ", tôi giả sử bạn muốn thực thi tuân thủ FIPS 140 ở chế độ thư viện Windows và .Net bằng cách thay đổi Local Security Policy settings. Thách thức với sự tuân thủ FIPS 140 (thường là mức 1 của phiên bản mới nhất của tiêu chuẩn, FIPS 140-2) bằng cách sử dụng cơ chế này, như bạn đã phát hiện, là nó ngăn chặn sự diễn giải của các thuật toán không tuân thủ FIPS 140, ngay cả khi chúng không được sử dụng cho mục đích liên quan đến bảo mật.

Có lẽ bạn đã kiểm tra mã của mình cho bất kỳ tham chiếu nào đến thuật toán không tuân thủ bằng cách sử dụng công cụ như ildasm hoặc Reflector. Nếu không, hãy gỡ lỗi mã của bạn và xem xét dấu vết ngăn xếp của số được ném InvalidOperationException để xem vấn đề nằm ở đâu.

Một cách dễ dàng để thực hiện việc này là sử dụng các lớp chung và tránh gọi các nhà thầu trực tiếp. Ví dụ, nếu bạn muốn sử dụng Advanced Encryption Standard (AES), thay vì:

// Use the faster .Net implementation of AES. Not FIPS 140 compliant. 
using (AesManaged aesManaged = new AesManaged()) 
{ 
    // Do something 
} 

sử dụng:

// Let .Net workout which implementation of AES to use. Will use 
// a FIPS compliant implementation if FIPS is turned on. 
using (Aes aes = Aes.Create()) 
{ 
    // Do something 
} 

Ngoài mã của bạn, kiểm tra thư viện của bên thứ ba bạn sử dụng. Bạn có thể sử dụng các công cụ tương tự như trên để kiểm tra bất kỳ tham chiếu nào từ mã của chúng. Nếu bạn đã kiểm tra kỹ mã của mình, đây có thể là vấn đề nằm ở đó. Lưu ý rằng việc tháo rời mã của bên thứ ba có thể vi phạm bản quyền hoặc thỏa thuận cấp phép.

Đồng thời kiểm tra cấu hình SSL của bạn. Ví dụ: chứng chỉ kỹ thuật số được sử dụng cho SSL không thể sử dụng MD5. Bạn cũng phải sử dụng TLS 1.0 trở lên.

Tuy nhiên, buộc tuân thủ Windows FIPS 140 đang thực hiện điều đó một cách khó khăn. Hầu hết khách hàng, kể cả chính phủ Hoa Kỳ, không yêu cầu các thuật toán tuân thủ FIPS (hoặc về mặt kỹ thuật, việc triển khai các thuật toán này) sẽ được sử dụng.Ví dụ, họ hoàn toàn hạnh phúc cho bạn sử dụng MD5 để tạo ra một khóa băm của một chuỗi. Thay vào đó, khách hàng muốn bất cứ điều gì sản phẩm của bạn bảo vệ bằng cách sử dụng mật mã để được bảo vệ bằng cách thực hiện FIPS 140 khiếu nại của các thuật toán được phê duyệt. Nói cách khác:

  1. Xác định mỗi điều sản phẩm của bạn nên bảo vệ
  2. Bảo vệ chúng bằng cách sử FIPS 140 thư viện phù hợp
  3. Sử dụng dụng cụ (ví dụ phân tích tĩnh), xem xét mã và/hoặc kiểm toán của bên thứ ba để chứng minh thực thi.

Cũng lưu ý rằng việc bật chế độ FIPS 140 không nhất thiết làm cho Windows hoặc sản phẩm của bạn an toàn hơn. Bảo mật phức tạp hơn nhiều so với việc chọn một thuật toán mã hóa so với một thuật toán mã hóa khác (hoặc cụ thể là, một triển khai cụ thể của một thuật toán trên một triển khai khác). Microsoft no longer recommends this be turned on by default.

Các vấn đề liên quan