GoSuda

FIPS 140 Sertifikasyonu ve Golang

By Gosunuts
views ...

FIPS 140 (Federal Information Processing Standard Publication 140)

FIPS 140, ABD NIST tarafından belirlenen bir kripto modülü güvenlik sertifikasyon standardıdır. Bu standart, belirli bir kripto modülünün veya kütüphanesinin NIST tarafından tanımlanan güvenlik gereksinimlerini karşılayıp karşılamadığını değerlendirir. Dolayısıyla, FIPS 140 sertifikasyonunu geçmiş olmak, ilgili modülün resmi olarak güvenilir bir güvenliğe sahip olduğu ve finans, tıp, savunma gibi güvenliğin kritik olduğu alanlarda kullanılabileceği anlamına gelir.

FIPS 140, 1994 yılında ilk kez yayımlandıktan sonra, 2001 yılında FIPS 140-2 olarak, 2019 yılında ise FIPS 140-3 olarak revize edilmiştir. Günümüzde de birçok sistem ve uygulama FIPS 140-2 veya FIPS 140-3 sertifikasyonu talep etmektedir.

FIPS 140 ve Programlama Dilleri

Bu nedenle, FIPS 140 sertifikalı kripto modülleri, çeşitli programlama dilleri ve ortamlarında fiili bir standart gibi kullanılmaktadır. Başlıcaları OpenSSL, BoringSSL, LibreSSL, NSS olup, bunlar güvenliğin kritik olduğu uygulamalarda en yaygın olarak kullanılan modüllerdir.

FIPS 140 sertifikalı modüllerin çoğu C veya C++ ile yazılmıştır. Bu nedenle PHP, Python, Javascript gibi dillerde bu modülleri doğrudan kullanmak yerine, harici Provider modülleri aracılığıyla entegrasyon yoluyla FIPS ortamı oluşturulur. Ancak bu yaklaşımda bazı sınırlamalar mevcuttur.

  • Sürüm Uyuşmazlığı Sorunu

    FIPS 140 sertifikasyonu yalnızca belirli bir sürüme verilir. Bu nedenle, modülün en son sürümünü kullanmak için yeniden sertifikasyon sürecinden geçilmesi gerekir ve bu süreçte uygulamanın kullandığı modül ile FIPS sertifikalı modül arasında sürüm uyuşmazlığı meydana gelebilir. Yetkilendirilmemiş bir sürüm kullanılırsa, ilgili ortam artık FIPS sertifikalı bir ortam olarak kabul edilmeyecektir.

  • Dinamik Yükleme ve Performans Düşüşü

    Çoğu dil, FIPS 140 sertifikalı modülleri dinamik kütüphane biçiminde yükleyerek kullanır. Bu yöntem, başlatma ve yürütme süreçlerinde performans düşüşüne neden olabilir ve çalışma zamanında bir sorun ortaya çıkması durumunda uygulamanın genel kararlılığına doğrudan etki etme riski taşır.

  • Güvenlik Açıkları

    Yukarıda belirtildiği gibi, OpenSSL Provider gibi harici modüllerle entegrasyon yapısında, ilgili modülün güvenlik açıkları doğrudan uygulamaya yayılma riski taşır. Ayrıca, uygulama ile harici modül arasındaki iletişim katmanı, ek bir saldırı yüzeyi haline gelir ve bunu korumak için ayrı bir güvenlik katmanına ihtiyaç duyulur. Bu, karmaşıklığı artırarak beklenmedik güvenlik açıklarına yol açabilir.

FIPS 140 ve Golang

Bu nedenlerden dolayı Golang farklı bir strateji benimsemiştir. Go, FIPS 140 sertifikasyonunu harici araçlara bağımlı kalmadan, resmi kriptografi kütüphanesinde doğrudan destekleme yolunu seçmiştir. Dolayısıyla geliştiriciler, ayrı bir Provider kurmaya veya yapılandırmaya gerek kalmadan, standart crypto paketini olduğu gibi kullanarak FIPS sertifikalı modu (GOFIPS=1) etkinleştirmeleri yeterlidir. Bu süreçte harici modüllerle iletişim sınırı ortadan kalktığı için güvenlik artırılır ve statik olarak derlenmiş tek bir ikili dosyanın dağıtılması yeterli olduğu için operasyonel süreçler de basitleşir.

FIPS 140-2 ve Golang

Bunun için Golang, BoringSSL'den türetilen BoringCrypto modülünü Go çalışma zamanına entegre ederek FIPS 140-2 sertifikasyonunu almıştır. BoringCrypto, Go 1.19 sürümünden sonra belirli dağıtımlarda etkinleştirilebilir ve bu sayede Go uygulamaları, ayrı bir harici modüle ihtiyaç duymadan FIPS 140-2 sertifikalı bir ortam oluşturabilir.

Ancak BoringCrypto, OpenSSL tabanlı olduğu için hala C diline bağımlılığı bulunmaktadır. Bu nedenle Go uygulamaları tamamen bağımsız bir ikili olarak derlenemez ve gerekli C kütüphanelerinin birlikte dağıtılması gibi bir kısıtlama mevcuttu.

FIPS 140-3 ve Golang

Go ekibi, bu sınırlamaları aşmak için mevcut Go standart crypto kütüphanesini FIPS 140-3 spesifikasyonlarına uygun olarak iyileştirmiştir. Bu geliştirilmiş modül, Go 1.21 sürümünden itibaren deneysel olarak sunulmaya başlanmış olup, şu anda NIST'in FIPS 140-3 sertifikasyon değerlendirmesi devam etmektedir.NIST FIPS 140-3 Değerlendirme Sürecindeki Modüller Listesi

Bu durum, Go kriptografi kütüphanesinin olgunluğunu göstermekte olup, Go'nun tamamen bağımsız tek bir ikili ile FIPS 140-3 sertifikalı bir ortam sunabilmesini sağlamıştır.

Ayrıca, Go ekibi sadece FIPS 140-3 standardını karşılamakla kalmayıp, kendi içinde güvenliği de artırmıştır.

  • Fail Fast

    Go'nun FIPS modu, Fail Fast güvenlik modelini uygulayarak, sertifikasız bir algoritma çağrıldığında panic ile yürütmeyi anında durdurur. Bu, diğer dillerin Provider tabanlı modellerinin yedekleme olasılığını bırakmasına kıyasla, güvenlik ve düzenleyici uyumluluk açısından daha katı ve net bir güvence sağlar.

  • Hedged Signature

    FIPS 140-3 standardı, ECDSA imza atarken RFC6979 yöntemini önermektedir. Ancak Go, buna ek olarak Hedged yöntemini de benimseyerek, imza sürecinde meydana gelebilecek yan kanal saldırılarına karşı daha güçlü bir yanıt vermektedir.

  • Güçlendirilmiş Rastgele Sayı Üreteci

    Go'nun rastgele sayı üreteci, kullanıcı alanı DRBG (Deterministic Random Bit Generator) kullanırken, işletim sistemi çekirdeğine ek entropi enjekte ederek, yalnızca kullanıcı alanında değil, çekirdek alanında da yüksek kaliteli rastgele sayılar üretir. Bu sayede rastgele sayı üretecisinin güvenliği daha da güçlendirilir.