FIPS 140-3 sertifikalı GKI şifreleme modülü

GKI çekirdeği bir Şu API'lerle uyumlu olan fips140.ko adlı Linux çekirdek modülü FIPS 140-3 gereksinimleri şifreleme yazılımı modülleri var. Bu modül FIPS için gönderilebilir GKI çekirdeğini çalıştıran ürün için sertifika gerekliyse

Özellikle aşağıdaki FIPS 140-3 koşullarının, şifreleme rutinleri kullanılabilir:

  • Modül, kriptografik algoritmalar oluşturmadan önce kendi bütünlüğünü kontrol etmelidir kullanılabilir.
  • Modül, onaylanmış şifreleme algoritmalarını uygulamalı ve doğrulamalıdır bilinen yanıtlarla oluşturulan kendi kendine testler oluşturun.

Neden ayrı çekirdek modülü

FIPS 140-3 doğrulaması, bir yazılımın veya donanımın önceden sertifikasına sahip olduğundan hiçbir zaman değiştirilmemiştir. Değiştirilmişse yeniden sertifikalandırıldı. Bu, proje yönetimi metodolojilerindeki yazılım geliştirme süreçleriyle ve bu şartın bir sonucu olarak, FIPS yazılım modüllerini kriptografik bileşenlere en az onun kadar sıkı bir şekilde kriptografiyle ilgili olmayan değişikliklerin, ilk andan itibaren geçerli olacak kriptografinin yeniden değerlendirilmesini gerektirir.

GKI çekirdeği, desteklenen tüm süre boyunca düzenli olarak güncellenmelidir. kullanım ömrü. Bu, çekirdeğin tamamının FIPS içinde yer almasını olanaksız kılar bir modülün her çekirdekte yeniden sertifikalandırılarak yeniden sertifikalandırılmadan önce güncelleyin. "FIPS modülünü" tanımlama bir alt kümesi olmak ikili içerik olarak gördüğümüzden, bir problemi "FIPS modülü" gerekenden çok daha sık değişeceğini unutmayın.

6.1 çekirdek sürümünden önce dikkat edilmesi gereken bir başka konu da GKI'nın LTO'nun (Bağlantı Süresi Optimizasyonu) etkin olması için, LTO'nun Kontrol Akış bütünlüğü, önemli bir güvenlik özelliğidir.

Bu nedenle, FIPS 140-3 gereksinimlerinin kapsadığı tüm kodlar paketlenir. fips140.ko, yalnızca kararlı sürüme dayalı ayrı bir çekirdek modülüne entegre edildi. GKI çekirdek kaynağı tarafından kullanıma sunulan arayüzleri keşfedin. Bu modülün, aynı SDK'nın farklı GKI sürümleriyle kullanılabileceği ve yalnızca sertifikasyon için güncellenip yeniden gönderilmesi gerektiğini olup olmadığını kontrol etmenizi öneririz.

Modül ne zaman kullanılır?

GKI çekirdeğinin kendisi, Kripto rutinlerine bağlı olan bir kod FIPS 140-3 çekirdek modülüne de dahil edilmiştir. Bu nedenle, yerleşik kripto rutinler aslında GKI çekirdeğinden taşınmaz inceleyeceğiz. Modül yüklendiğinde yerleşik şifreleme rutinleri Linux CryptoAPI'dan kaydı kaldırılmış ve modülünü kullanabilirsiniz.

Bu, fips140.ko modülünün tamamen isteğe bağlı olduğu ve gerekiyorsa FIPS 140-3 sertifikasının kullanılması mantıklıdır. Bunun ötesinde, modülün herhangi bir ek özelliği yoktur ve modülün gereksiz yalnızca başlatma süresini etkiler. Herhangi bir fayda sağlamaz.

Modülü dağıtma

Modül, aşağıdaki adımlar uygulanarak Android derlemesine dahil edilebilir:

  • Modül adını BOARD_VENDOR_RAMDISK_KERNEL_MODULES öğesine ekleyin. Bu durum, tedarikçi firma ramdisk'ine kopyalanacak.
  • Modül adını BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD öğesine ekleyin. Bu Modül adının hedefteki modules.load öğesine eklenmesine neden olur. modules.load,init olduğundan emin olun.

Bütünlük kendi kendine kontrolü

FIPS 140-3 çekirdek modülü kendi .code HMAC-SHA256 özetini alır ve .rodata bölümlerini kullanır ve bunu özetle karşılaştırır. modüle kaydedilir. Bu işlem, Linux modül yükleyicisinin ELF yer değiştirme işleme ve taşıma gibi alternatiflere yama uygulayabilirsiniz. Aşağıdakiler özetin yeniden kullanılabilmesini sağlamak için ek adımlar şekilde değiştirebilirsiniz:

  • ELF yer değiştirmeleri modül içinde korunur, böylece bu tersine çevirmeyi deneyin.
  • Modül, Dinamik Arama Ağı Reklamları için çekirdek tarafından oluşturulan tüm kod yamalarını Gölge Çağrı Yığını. Daha ayrıntılı olarak belirtmek gerekirse modül, İşaretçi Kimlik Doğrulama Kodu ile gölge çağrısı yığınından itme veya çıkartma (PAC) talimatlarıdır.
  • Statik anahtarlar ve statik anahtarlar dahil olmak üzere diğer tüm kod yamaları modül için devre dışı bırakılır satıcı kancalarının yanı sıra izleme noktaları da oluşturun.

Bilinen yanıtlarla yapılan kendi kendine testler

FIPS 140-3 gereksinimlerinin kapsamına giren uygulanmış tüm algoritmalar, kullanmadan önce bilinen yanıtlarla kendi kendine test yapın. FIPS 140-3'e göre Uygulama Rehberliği 10.3.A, desteklenen anahtar uzunluklarından herhangi birini kullanarak algoritma başına tek bir test vektörü (hem şifreleme hem de şifre çözme test edildiği sürece) şifreler için yeterlidir.

Linux CryptoAPI'de algoritma öncelikleri kavramı vardır. uygulamaları (ör. özel şifreleme talimatları ve yedek için aynı algoritmanın aynı algoritmanın bir arada bulunur. Dolayısıyla, aynı girişin tüm uygulamalarını test etmek algoritmasından faydalanırsınız. Bu gereklidir çünkü Linux CryptoAPI, atlanmasını ve daha düşük öncelikli bir algoritmanın seçildi.

Modüle dahil edilen algoritmalar

FIPS 140-3 modülünde yer alan tüm algoritmalar aşağıda listelenmiştir. Bu, android12-5.10, android13-5.10, android13-5.15, Bununla birlikte android14-5.15, android14-6.1 ve android15-6.6 çekirdek dalları uygun yerlerde, çekirdek sürümleri arasındaki farklılıklara dikkat edin.

Algoritma Uygulamalar Onaylanabilir Tanım
aes aes-generic, aes-arm64, aes-ce, AES kitaplığı Evet Çalışma modu olmadan düz AES blok şifresi: Tüm anahtar boyutları (128 bit, 192 bit ve 256 bit) desteklenir. Kitaplık uygulaması dışındaki tüm uygulamalar, bir şablon üzerinden çalışma moduyla oluşturulabilir.
cmac(aes) cmac (şablon), cmac-aes-neon, cmac-aes-ce Evet AES-CMAC: Tüm AES anahtar boyutları desteklenir. cmac şablonu, cmac(<aes-impl>) kullanılarak herhangi bir aes uygulamasıyla oluşturulabilir. Diğer uygulamalar bağımsızdır.
ecb(aes) ecb (şablon), ecb-aes-neon, ecb-aes-neonbs, ecb-aes-ce Evet AES-ECB: Tüm AES anahtar boyutları desteklenir. ecb şablonu, ecb(<aes-impl>) kullanılarak herhangi bir aes uygulamasıyla oluşturulabilir. Diğer uygulamalar bağımsızdır.
cbc(aes) cbc (şablon), cbc-aes-neon, cbc-aes-neonbs, cbc-aes-ce Evet AES-CBC: Tüm AES anahtar boyutları desteklenir. cbc şablonu, ctr(<aes-impl>) kullanılarak herhangi bir aes uygulamasıyla oluşturulabilir. Diğer uygulamalar bağımsızdır.
cts(cbc(aes)) cts (şablon), cts-cbc-aes-neon, cts-cbc-aes-ce Evet Şifrelenmiş metin çalma özelliğine sahip AES-CBC-CTS veya AES-CBC: Kullanılan kural: CS3; şifrelenmiş son iki metin bloğu koşulsuz olarak değiştirilir.Tüm AES anahtar boyutları desteklenir.cts şablonu, cts(<cbc(aes)-impl>) kullanılarak herhangi bir cbc uygulamasıyla oluşturulabilir.Diğer uygulamalar bağımsızdır.
ctr(aes) ctr (şablon), ctr-aes-neon, ctr-aes-neonbs, ctr-aes-ce Evet AES-TO: Tüm AES anahtar boyutları desteklenir. ctr şablonu, ctr(<aes-impl>) kullanılarak herhangi bir aes uygulamasıyla oluşturulabilir. Diğer uygulamalar bağımsızdır.
xts(aes) xts (şablon), xts-aes-neon, xts-aes-neonbs, xts-aes-ce Evet AES-XTS: 6.1 ve daha eski çekirdek sürümlerinde tüm AES anahtar boyutları desteklenir; yalnızca AES-128 ve AES-256 desteklenmektedir. xts şablonu, xts(<ecb(aes)-impl>) kullanılarak herhangi bir ecb(aes) uygulamasıyla oluşturulabilir. Diğer uygulamalar bağımsızdır. Tüm uygulamalar, FIPS'nin gerektirdiği zayıf anahtar kontrolünü uygular; yani birinci ve ikinci yarısı eşit olan XTS anahtarları reddedilir.
gcm(aes) gcm (şablon), gcm-aes-ce Hayır1 AES-GCM: Tüm AES anahtar boyutları desteklenir. Yalnızca 96 bit IV'ler desteklenir. Bu modüldeki diğer tüm AES modlarında olduğu gibi, IV'lerin sağlanmasından arayan kişi sorumludur. gcm şablonu, gcm_base(<ctr(aes)-impl>,<ghash-impl>) kullanılarak tüm ctr(aes) ve ghash uygulamalarıyla oluşturulabilir. Diğer uygulamalar bağımsızdır.
sha1 sha1-generic, sha1-ce Evet SHA-1 şifreli karma işlevi
sha224 sha224-generic, sha224-arm64, sha224-ce Evet SHA-224 şifreli karma işlevi: Kod, SHA-256 ile paylaşılır.
sha256 sha256-generic, sha256-arm64, sha256-ce, SHA-256 kitaplığı Evet SHA-256 şifreleme karma işlevi: Standart CryptoAPI arayüzüne ek olarak SHA-256'ya bir kitaplık arayüzü sağlanır. Bu kitaplık arayüzünde farklı bir uygulama kullanılmıştır.
sha384 sha384-generic, sha384-arm64, sha384-ce Evet SHA-384 şifreleme karma işlevi: Kod, SHA-512 ile paylaşılır.
sha512 sha512-generic, sha512-arm64, sha512-ce Evet SHA-512 şifreli karma işlevi
sha3-224 sha3-224-generic Evet SHA3-224 şifreli karma işlevi. Yalnızca 6.6 ve sonraki çekirdek sürümlerinde mevcuttur.
sha3-256 sha3-256-generic Evet Öncekiyle aynı, ancak 256 bit özet uzunluğunda (SHA3-256). Tüm özet uzunlukları aynı Keccak uygulamasını kullanır.
sha3-384 sha3-384-generic Evet Öncekiyle aynı ancak 384 bit özet uzunluğunda (SHA3-384). Tüm özet uzunlukları aynı Keccak uygulamasını kullanır.
sha3-512 sha3-512-generic Evet Öncekiyle aynı, ancak 512 bit özet uzunluğunda (SHA3-512). Tüm özet uzunlukları aynı Keccak uygulamasını kullanır.
hmac hmac (şablon) Evet HMAC (Anahtarlı Karma İleti Kimlik Doğrulama Kodu): hmac şablonu, hmac(<sha-alg>) veya hmac(<sha-impl>) kullanılarak herhangi bir SHA algoritması veya uygulaması ile oluşturulabilir.
stdrng drbg_pr_hmac_sha1, drbg_pr_hmac_sha256, drbg_pr_hmac_sha384, drbg_pr_hmac_sha512 Evet HMAC_DRBG, adlandırılmış karma işleviyle ve tahmin direnci etkinken: Durum denetimleri dahil edildi. Bu arayüzün kullanıcıları kendi DRBG örneklerini alır.
stdrng drbg_nopr_hmac_sha1, drbg_nopr_hmac_sha256, drbg_nopr_hmac_sha384, drbg_nopr_hmac_sha512 Evet drbg_pr_* algoritmaları ile aynı olsa da tahmin direnci devre dışıdır. Kod, tahmine dirençli varyantla paylaşılır. 5.10 çekirdek sürümünde en yüksek öncelikli DRBG, drbg_nopr_hmac_sha256 değeridir. 5.15 ve sonraki çekirdek sürümlerinde drbg_pr_hmac_sha512 değerine sahiptir.
jitterentropy_rng jitterentropy_rng Hayır Jitter RNG, sürüm 2.2.0 (çekirdek sürümü 6.1 ve önceki sürümler) veya sürüm 3.4.0 (çekirdek sürümü 6.6 ve sonrası). Bu arayüzün kullanıcıları kendi Jitter RNG örneklerini alır. DRBG'lerin kullandığı örnekleri yeniden kullanmazlar.
xcbc(aes) xcbc-aes-neon, xcbc-aes-ce Hayır
xctr(aes) xctr-aes-neon, xctr-aes-ce Hayır Yalnızca 5.15 ve sonraki çekirdek sürümlerinde mevcuttur.
cbcmac(aes) cbcmac-aes-neon, cbcmac-aes-ce Hayır
essiv(cbc(aes),sha256) essiv-cbc-aes-sha256-neon, essiv-cbc-aes-sha256-ce Hayır

Modülü kaynaktan derleyin

Android 14 ve sonraki sürümler için ( android-mainline) oluşturmak için aşağıdaki kodu kullanarak fips140.ko modülünü kaynaktan derleyin ekleyebilirsiniz.

  • Bazel ile derleme:

    tools/bazel run //common:fips140_dist
    
  • build.sh ile oluşturun (eski):

    BUILD_CONFIG=common/build.config.gki.aarch64.fips140 build/build.sh
    

Bu komutlar, çekirdek ve fips140.ko dahil olmak üzere tam bir derleme gerçekleştirir. modülünün yüklü olduğu HMAC-SHA256 özet içeriğine sahip olmasını sağlayın.

Son kullanıcı rehberliği

Kripto yetkilisi rehberliği

Çekirdek modülünü çalıştırmak için işletim sisteminin tek operatör çalışma modu. Bu işlem, Android tarafından otomatik olarak işlenir. Bu da işlemcide bellek yönetim donanımını kullanma anlamına geliyor.

Çekirdek modülü ayrı olarak yüklenemez; Açılışta otomatik olarak yüklenir. Yalnızca onaylanmış bir çalışma şeklidir.

Şifreleme Yetkilisi, cihazı yeniden başlatarak her zaman kendi kendine testlerin çalıştırılmasına neden olabilir için geçerlidir.

Kullanıcı rehberliği

Çekirdek modülünün kullanıcısı, kullanılması gereken diğer çekirdek bileşenleridir. şifreleme algoritmalarından biridir. Çekirdek modülü şurada ek mantık sağlamıyor: ve zamanın dışındaki parametreleri depolamaz ve işlem için gereklidir.

FIPS uygunluğu amacıyla algoritmaların kullanımı, yalnızca onaylanan kullanır. FIPS 140-3 "hizmet göstergesini" karşılamak için ve gerekiyorsa modülü, fips140_is_approved_service projenizin kabul edilir.

Kendi kendine test hataları

Kendi kendine test hatası durumunda, çekirdek modülü, çekirdeğin cihaz açılmaya devam etmez. Cihaz yeniden başlatılırsa sorunu çözmezse, sorunu çözebilir.


  1. Modülün AES-GCM uygulamalarının "Algoritmanın onaylandı" ancak "modül tarafından onaylandı" değil. Doğrulanabilirler ancak AES-GCM , FIPS modülü açısından onaylı bir algoritma olarak kabul edilemez. Bunun nedeni, GCM için FIPS modülü gereksinimlerinin Kendi IV'lerini oluşturmayan GCM uygulamaları.