2013-06-14 37 views
7

Tôi đang làm việc trên một dự án có liên quan đến bảo mật và phải đảm bảo rằng nó tuân theo sự tuân thủ FIPS.Tuân thủ FIPS cho dự án Android của tôi

Theo hiểu biết của tôi, tuân thủ FIPS tuân thủ ở phần cứng cũng như cấp phần mềm. Hiện tại có 2 thiết bị Android của Samsung tương thích với FIPS, tức là chúng có sự tuân thủ ở cấp phần cứng và phần mềm. Tôi có vài câu hỏi như sau: -

1) Nếu tôi muốn làm cho ứng dụng Android của tôi tuân thủ FIPS, nếu tôi có mô-đun mã hóa duy nhất được sử dụng trong dự án FIPS tuân thủ, thì có đủ không?

Mô-đun mã hóa do Android SDK cung cấp là thư viện BouncyCastle và không tuân thủ FIPS.

Tôi đang sử dụng FIPS tuân thủ thư viện OpenSSL trong dự án của tôi theo stackoverflow link

tôi đã xây dựng thư viện dự án của tôi bằng cách sử dụng thư viện OpenSSL tức libssl.a và libcrypto.a cấu hình sử dụng FIPS module.

2) Theo mô-đun FIPS OpenSSL cho Android documentation, mô-đun đã được thử nghiệm trên các thiết bị Android khác nhau của kiến ​​trúc armv7. Phần cứng Android có phải là vấn đề tuân thủ FIPS ở đây không?

3) Thuật toán AES tuân thủ FIPS tuân thủ. Điều này có nghĩa rằng nếu tôi sử dụng thuật toán AES trong mã Java thay vì sử dụng thư viện OpenSSL FIPS tuân thủ, nó không tuân thủ FIPS.

Nếu AES tuân thủ FIPS tuân thủ, nó phải làm gì với việc triển khai Java hoặc C# của AES. Cả hai đều phải vượt qua CMVP?

Hãy khai sáng cho tôi.

Trả lời

11

Theo hiểu biết của tôi, tuân thủ FIPS tuân thủ ở phần cứng cũng như cấp phần mềm.

FIPS 140-2 là tài liệu lớn tập trung vào phần cứng. Những người viết các yêu cầu là các kỹ sư điện đã xây dựng phần cứng. Ví dụ, Tiến sĩ Randy Easter chạy Chương trình Xác thực Mô-đun mật mã (CMVP). Đây là CV ngắn gọn của anh ấy: http://www.nist.gov/itl/csd/easter-randy.cfm. Anh ấy là một đôi E chắc chắn;)

Khi NIST và CMVP trở lại trang bị các yêu cầu cho phần mềm, họ đã đập một chốt vuông vào một lỗ tròn. Bạn sẽ tìm thấy rất nhiều điều mà làm cho hoàn toàn không có ý nghĩa trong bối cảnh của phần mềm. Ví dụ, OpenSSL (và các thư viện được xác thực FIPS khác) lưu trữ khóa HMAC (đối xứng) để xác minh tính toàn vẹn của phần mềm trong chính phần mềm đó. (Nó rất khác nhau khi phím được đốt cháy thành rom, với các cầu chì thổi, trên PCB chống giả mạo, và trong thùng chống giả mạo).

Để hoàn chỉnh, bạn có thể tìm thấy các phương pháp kiểm tra tính toàn vẹn được phê duyệt trong số Implementation Guidance for FIPS PUB 140-2 and the Cryptographic Module Validation Program. Chúng thực sự bao gồm CMAC và HMAC.


... Ứng dụng Android FIPS compliant ...

Trước tiên :)

Theo Chương trình Validation Mô-đun mã hóa (CMVP), có hai loại mật mã: xác nhận và không xác nhận. "Compliant" có nghĩa là không có gì (cũng không "tuân thủ", "phê duyệt", "tương đương", vv).

Ứng dụng của bạn sẽ sử dụng mật mã được xác thực hoặc sẽ không sử dụng mật mã được xác thực. Nếu bạn nêu rõ ứng dụng của mình đang sử dụng mật mã "tuân thủ", thì đó là không phải bằng cách sử dụng mật mã được xác thực. Đây là lỗi tiếp thị điển hình: http://webdrive.com/support/webdrive/v11/fips_compliance.htm.

Tôi biết DHS đã rút một loạt thiết bị chuyển mạch ra khỏi Liên bang vì bộ phận tiếp thị của nhà sản xuất chuyển mạch gọi là "FIPS Compliant" thay vì "FIPS Validated".


1) Nếu tôi muốn làm cho ứng dụng Android của tôi FIPS tuân thủ, nếu tôi có chỉ module crypto sử dụng trong dự án của tôi FIPS tuân thủ, nó là đủ?

Không. Có hai phần của số này Đầu tiên là thủ tục và được đặt trong chính sách bảo mật của mô-đun. Ví dụ, OpenSSL có một thủ tục để xây dựng nó từ các nguồn, và bạn không thể đi chệch khỏi các thủ tục.

Cách thứ hai là sử dụng (vì thiếu thời hạn tốt hơn) và yêu cầu bạn tuân thủ các yêu cầu hoạt động FIPS 140-2. Ví dụ: bạn không thể sử dụng lại các khóa và iv khi gửi thư được mã hóa theo AES.

Thứ gì đó rơi vào cả hai: bạn phải gọi FIPS_mode_set và phải trả về giá trị khác 0. Không gọi FIPS_mode_set là một lỗi thủ tục và có nghĩa là bạn không sử dụng mật mã được xác thực. Lỗi từ FIPS_mode_set là lỗi hoạt động và có nghĩa là bạn không sử dụng mật mã được xác thực.

Nếu bạn đang sử dụng OpenSSL, bạn cũng nên bao gồm "nhà cung cấp được xác nhận" trong bảng dữ liệu của mình và trích dẫn chứng chỉ 1747. Tôi tin rằng đó là yêu cầu của Chính sách bảo mật và không cung cấp nó có nghĩa là mật mã của bạn là không phải là đã xác thực!


mô-đun Crypto được cung cấp bởi Android SDK là BouncyCastle thư viện và nó không phải là FIPS tuân thủ.

Tôi không sử dụng Lâu đài Bouncy, vì vậy tôi không biết trạng thái của nó. Nếu thư viện đã được xác nhận, thì sẽ có một chứng chỉ do CMVP cấp. Bạn có thể xem chúng tại Validated FIPS 140-1 and FIPS 140-2 Cryptographic Modules.


Tôi đang sử dụng FIPS tuân thủ thư viện OpenSSL trong dự án của tôi theo stackoverflow liên kết

Bạn cũng nên thử wiki OpenSSL của: FIPS Library and Android.

Để hoàn tất, bạn không thể sử dụng hệ thống xây dựng của Android cho OpenSSL và sau đó yêu cầu mật mã xác thực FIPS.Phân kỳ tổng của nó từ các thủ tục được xuất bản trong Chính sách bảo mật, do đó nó làm mất hiệu lực xác nhận hợp lệ.


Theo module OpenSSL FIPS cho tài liệu Android, module đã được thử nghiệm trên các thiết bị Android khác nhau của ARMv7 kiến ​​trúc .

Đây là khu vực khó khăn để gỡ rối. Steve Marquess đã cố gắng trả lời nó tại OpenSSL FIPS 2.0 Object Module platform questions.

Đây là sự hiểu biết của tôi (có thể không chính xác): khi nền tảng được xác thực, các thay đổi nhỏ đối với nền tảng được chấp nhận bởi Chương trình xác thực mô-đun mã hóa (CMVP). Tôi tránh chỉ là "nền tảng" là gì, nhưng nó bao gồm bo mạch chủ, bộ vi xử lý, tập lệnh và các ảnh hưởng hoạt động khác. Nói chung, nó không bao gồm các ảnh hưởng môi trường như thư viện thời gian chạy.

Ví dụ, Apple có thể sửa đổi nhỏ bo mạch chủ cho iPad với bộ xử lý A6 (có thể thay đổi hệ số dạng hoặc cung cấp máy ảnh tích hợp cải tiến). Nó thậm chí có thể thực hiện sửa đổi nhỏ cho bộ vi xử lý A6 chính nó (có lẽ tăng kích thước bộ nhớ cache). Họ có thể gọi nó bất cứ điều gì họ muốn (một IpAd 3, iPad 4, hoặc bất cứ điều gì tickles Fan Boi). Tuy nhiên, một bộ xử lý A7 trong cùng một bo mạch chủ sẽ yêu cầu xác thực khác bởi vì nó là một phiên bản chính. Điều tương tự cũng áp dụng cho các tập lệnh: armv7 và armv7 yêu cầu xác thực riêng biệt.

Ví dụ khác, hãy xem xét bộ vi xử lý ARMv7. Bộ vi xử lý Snapdragon sử dụng ARMv7 là một nền tảng khác với một ARM7EJ-S cổ điển từ tập đoàn ARM Holdings. Cả hai yêu cầu xác thực riêng biệt. Và một NEON là ARMv7, và nó có một xác nhận riêng biệt (tôi nghĩ rằng nó thêm một vài hướng dẫn đa phương tiện trên đầu trang của ARMv7).

Và CMVP có thể thay đổi quyết định của mình bất kỳ lúc nào và ngừng chấp nhận các hiệu ứng nền tảng phụ.


phần cứng Will Android không phải là FIPS tuân vấn đề ở đây

Không, miễn là nền tảng (bao gồm cả phần cứng) đã được xác nhận trước đó. Nếu nền tảng này trước đây không xác nhận, sau đó nó là một vấn đề;)


3) thuật toán AES đang được tuân thủ FIPS. Có phải điều này có nghĩa là nếu tôi sử dụng thuật toán AES trong mã Java thay vì trong việc sử dụng thư viện OpenSSL tuân thủ FIPS, nó không tuân thủ FIPS FIPS.

Đúng. Mã Java không phải là FIPS được xác thực, do đó ứng dụng của bạn không thể sử dụng mật mã được xác thực FIPS.

Để hoàn chỉnh, cũng có Chương trình xác thực thuật toán mật mã (CAVP). CAVP sẽ đăng xuất vào việc thực thi AES bằng cách cấp chứng chỉ. Ví dụ, triển khai AES của OpenSSL đã được cấp chứng chỉ 1884, 2116, 2234, 2342, 2394 và 2484.

Cuối cùng, sau khi các bộ phận NIST khác (như CAVP) hoàn thành kiểm tra mô-đun của bạn, thì CMVP sẽ đăng xuất trên mô-đun (nói chung) và cấp chứng chỉ. Ví dụ: NIST đã cấp Chứng chỉ 1747 cho OpenSSL.


Nếu AES đang được tuân thủ FIPS, những gì hiện nó phải làm với Java hoặc C# thực hiện AES. Cả hai có phải vượt qua thông qua CMVP không?

Vì bạn đang sử dụng FIPS Đã xác thực OpenSSL, sau đó bạn sẽ phải:

  • Dưới Android và Java, sử dụng JNI và gọi vào một đối tượng chia sẻ. Đối tượng được chia sẻ phải cung cấp mật mã xác thực FIPS của OpenSSL.
  • Trong C#, sử dụng P/Gọi hoặc Inerop và gọi vào thư viện liên kết động. Thư viện liên kết động phải cung cấp mật mã xác thực FIPS của OpenSSL.

tôi đã xây dựng thư viện dự án của tôi bằng cách sử dụng thư viện OpenSSL tức libssl.a và libcrypto.a cấu hình sử dụng FIPS module.

Bạn không thể chạy fipsldincore qua thư viện tĩnh, vì vậy có vẻ như đã xảy ra sự cố. Chúng chỉ có thể chạy trên các tệp thực thi và các đối tượng được chia sẻ. fipsldincore làm việc cùng nhau và nhúng chữ ký của mã và dữ liệu liên quan đến FIPS vào thư viện hoặc ứng dụng được chia sẻ có thể thực thi của bạn. Mã và dữ liệu liên quan đến FIPS đến từ (1) fipscanister.o và (2) fips_premain.c.

Để hiển thị vòng tròn đầy đủ, fipsld biên dịch fips_premain.c và liên kết trong fipscanister.o đến đối tượng hoặc ứng dụng được chia sẻ có thể thực thi của bạn. Sau đó, incore ghi chữ ký vào đối tượng hoặc ứng dụng được chia sẻ có thể thực thi của bạn. Khi bạn gọi FIPS_mode_set, tính toàn vẹn của mã liên quan đến FIPS, dữ liệu được xác minh qua HMAC và sau đó các kiểm tra tự liên quan đến FIPS được thực thi. Nếu tất cả thành công, thì FIPS_mode_set trả về khác 0 và bạn đang sử dụng mật mã được xác thực FIPS.

Để tham khảo, OpenSSL cung cấp trang wiki tại đây: FIPS Library and Android. Nó thảo luận cách thiết lập CCFIPSCC_LD để fipsldincore "hoạt động" khi make 'ing dự án của bạn.

Không có trang iOS tương đương. Nhưng bạn có thể tìm thấy hướng dẫn trong số OpenSSL FIPS User Guide 2.0, Phụ lục E.

+0

Công cụ tuyệt vời .. bất kỳ thông tin chi tiết nào về lý do tại sao Google không sử dụng phiên bản fps libcrypto (hoặc nhận riêng) trong dự án Nguồn mở Android? – Blaze

+1

Blaze - không, không có ý tưởng. Họ có thể tài trợ cho một xác nhận cho phần cứng tham khảo của họ (trước đây là Samsung Nexus 4, hiện là LG Nexus 5), nhưng mỗi nền tảng sẽ cần xác nhận riêng của mình. Điều đó sẽ tùy thuộc vào OEM. – jww

+0

Tại sao mỗi nền tảng lại cần xác thực riêng của mình? Giống như bạn nói - "một khi nền tảng được xác thực, những thay đổi nhỏ đối với nền tảng được chấp nhận bởi Chương trình xác thực mô-đun mã hóa (CMVP)". Đó là logic này có các folks openssl nói rằng họ đang tốt để đi cho bất kỳ nền tảng Android armv7. – Blaze

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