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

Şifreleme rutinlerinin kullanılabilmesi için özellikle aşağıdaki FIPS 140-3 şartlarının karşılanması gerekir:

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

Neden ayrı bir ç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, günümüzde kullanılan yazılım geliştirme süreçleriyle tam olarak eşleşmez. Bu şartın bir sonucu olarak FIPS yazılım modülleri, genellikle şifrelemeyle ilgili olmayan değişikliklerin şifrelemenin yeniden değerlendirilmesini gerektirmemesi için şifreleme bileşenlerine mümkün olduğunca sıkı şekilde odaklanacak şekilde tasarlanır.

GKI çekirdeği, desteklenen tüm süre boyunca düzenli olarak güncellenmelidir. kullanım ömrü. Bu nedenle, her çekirdek güncellemesinde yeniden sertifikalanması gereken bu tür bir modülün tüm çekirdeğin FIPS modülü sınırı içinde olması mümkün değildir. "FIPS modülü"nü çekirdek görüntüsünün bir alt kümesi olarak tanımlamak bu sorunu hafifletir ancak "FIPS modülü"nün ikili içeriği yine de gerekenden çok daha sık değişeceğinden sorunu çözmez.

Çekirdek sürümü 6.1'den önce, GKI'nın LTO (Bağlantı Sırasında Optimizasyon) etkinken derlenmesi de dikkate alınması gereken bir noktaydı. LTO, önemli bir güvenlik özelliği olan Denetimli Akış Bütünlüğü için ön koşuldu.

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 kullanmalısınız?

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 yalnızca FIPS 140-3 sertifikası zorunluysa dağıtılmasının mantıklı olduğu anlamına gelir. Bunun dışında modül ek özellik sağlamaz ve gereksiz yere yüklenmesi, herhangi bir fayda sağlamadan yalnızca önyükleme süresini etkileyebilir.

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 alanına ekleyin. Bu durum, tedarikçi firma ramdisk'ine kopyalanacak.
  • Modül adını BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD alanına ekleyin. Bu, modül adının hedefteki modules.load alanına eklenmesine neden olur. modules.load, cihaz açıldığında init tarafından yüklenen modüllerin listesini tutar.

Bütünlük kendi kendine kontrolü

FIPS 140-3 çekirdek modülü, modül yükleme sırasında kendi .code ve .rodata bölümlerinin HMAC-SHA256 özetini alır ve modüle kaydedilen özetle karşılaştırır. Bu işlem, Linux modülü yükleyicisi ELF taşıma işlemi ve CPU düzeltmelerine yönelik alternatif yamalar gibi normal değişiklikleri yaptıktan sonra gerçekleşir. Aşağıdakiler özetin yeniden kullanılabilmesini sağlamak için ek adımlar şekilde değiştirebilirsiniz:

  • ELF taşıma işlemleri, HMAC girişine ters olarak uygulanabilmeleri için modül içinde korunur.
  • 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 itin veya popülasyon yapın (PAC) talimatlarıdır.
  • Statik anahtarlar ve dolayısıyla izleme noktaları ve tedarikçi kancaları da dahil olmak üzere modül için diğer tüm kod yamaları devre dışı bırakılır.

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 Uygulama Kılavuzu 10.3.A'ya göre, hem şifreleme hem de şifre çözme test edildiği sürece, desteklenen anahtar uzunluklarından herhangi birini kullanan algoritma başına tek bir test vektörü, şifreler için yeterlidir.

Linux CryptoAPI'de, aynı algoritmanın birkaç farklı uygulamasının (ör. özel şifreleme talimatlarını kullanan bir uygulama ve bu talimatları uygulamayan CPU'lar için yedek) birlikte bulunabileceği bir algoritma öncelikleri kavramı vardır. Bu nedenle, aynı algoritmanın tüm uygulamalarının test edilmesi gerekir. Linux CryptoAPI, öncelik tabanlı seçimin atlanmasına ve bunun yerine daha düşük öncelikli bir algoritmanın seçilmesine izin verdiğinden bu gereklidir.

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, android14-5.15, android14-6.1 ve android15-6.6 çekirdek dalları için geçerlidir. Bununla birlikte, uygun durumlarda çekirdek sürümleri arasındaki farklar belirtilir.

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 aes'un herhangi bir uygulamasıyla derlenebilir. 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 ecb(aes)'un herhangi bir uygulamasıyla derlenebilir. Diğer uygulamalar bağımsızdır. Tüm uygulamalar, FIPS tarafından zorunlu kılınan zayıf anahtar kontrolünü uygular. Yani ilk 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'leri sağlamaktan arayan 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 şifreleme karma işlevi
sha224 sha224-generic, sha224-arm64, sha224-ce Evet SHA-224 kriptografik 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ılıyor.
sha384 sha384-generic, sha384-arm64, sha384-ce Evet SHA-384 kriptografik 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 kriptografik karma işlevi. Yalnızca 6.6 ve sonraki çekirdek sürümlerinde bulunur.
sha3-256 sha3-256-generic Evet Önceki ile aynıdır ancak 256 bit özet uzunluğuna (SHA3-256) sahiptir. Tüm özet uzunlukları aynı Keccak uygulamasını kullanır.
sha3-384 sha3-384-generic Evet Önceki ile aynıdır ancak 384 bit özet uzunluğuna (SHA3-384) sahiptir. Tüm özet uzunlukları aynı Keccak uygulamasını kullanır.
sha3-512 sha3-512-generic Evet Önceki ile aynıdır ancak 512 bit özet uzunluğuna (SHA3-512) sahiptir. Tüm özet uzunlukları aynı Keccak uygulamasını kullanır.
hmac hmac (şablon) Evet HMAC (Anahtarlı Karma Mesaj Kimlik Doğrulama Kodu): hmac şablonu, hmac(<sha-alg>) veya hmac(<sha-impl>) kullanılarak herhangi bir SHA algoritması ya da uygulamasıyla derlenebilir.
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şlevle ve tahmine karşı direnç etkinleştirilmiş şekilde oluşturulur: Sağlık kontrolleri dahildir. 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. 5.15 ve sonraki çekirdek sürümlerinde bu değer drbg_pr_hmac_sha512'tür.
jitterentropy_rng jitterentropy_rng Hayır Jitter RNG, 2.2.0 sürümü (çekirdek sürümü 6.1 ve önceki sürümler) veya 3.4.0 sürümü (çekirdek sürümü 6.6 ve sonraki sürümler). 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 bulunur.
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 derleme

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

  • Bazel ile derleme:

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

    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ü kullanabilirsiniz.

Son kullanıcılara yönelik rehberlik

Şifreleme sorumlusu rehberliği

Çekirdek modülünün çalışması için işletim sisteminin tek bir operatör çalışma moduyla kısıtlanması gerekir. Bu işlem, Android tarafından otomatik olarak işlenir. işlemcide bellek yönetimi donanımı kullanılıyor olabilir.

Çekirdek modülü ayrı olarak yüklenemez. Cihaz donanım yazılımının bir parçası olarak dahil edilir ve önyükleme sırasında otomatik olarak yüklenir. Yalnızca onaylanmış bir çalışma modunda çalışır.

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

Kullanıcılara yönelik rehberlik

Çekirdek modülünün kullanıcısı, kriptografik algoritmalar kullanması gereken diğer çekirdek bileşenleridir. Çekirdek modülü, algoritmaların kullanımında ek mantık sağlamaz ve şifreleme işlemini gerçekleştirmek için gereken sürenin ötesinde herhangi bir parametre saklamaz.

FIPS uygunluğu amacıyla algoritmaların kullanımı, yalnızca onaylanan kullanır. Modül, FIPS 140-3 "hizmet göstergesi" şartını karşılamak için bir algoritmanın onaylanıp onaylanmadığını belirten bir işlev fips140_is_approved_service sağlar.

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ı.