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