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 hedeftekimodules.load
alanına eklenmesine neden olur.modules.load
, cihaz açıldığındainit
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.
-
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ı.↩