lightphe4j: Java Dünyası İçin Kısmi Homomorfik Şifreleme
Gizliliği koruyan makine öğrenimi ve konfidentiyel hesaplama süreçlerinde Python, prototipleme için genellikle ilk tercihlerdendir. LightPHE gibi kütüphaneler, veri bilimi ve yapay zeka iş akışlarında homomorfik veya eşşekilli şifrelemeyi (homomorphic encryption) oldukça pratik hale getirir. Ancak, bu konseptleri bankacılık, finans teknolojileri (fintech), sağlık ve kurumsal yazılımlar gibi sektörlerde canlıya alırken, ana altyapının omurgasını genellikle Java oluşturur. Bu iki dünya arasındaki boşluğu doldurmak amacıyla, LightPHE’nin doğrudan kütüphaneye entegre edilmiş Elliptic Curve (Elliptik Eğri) aritmetiğine sahip, saf Java ile yazılmış hafif bir portu olan lightphe4j kütüphanesini geliştirdik. Bu yazıda, kısmi homomorfik şifrelemenin (PHE) canlı ortamlarda neden tam homomorfik şifrelemeye (FHE) kıyasla daha avantajlı olduğunu, lightphe4j‘nin kritik süreçleri nasıl kolaylaştırdığını ve kurumsal Java uygulamalarında nasıl kullanılacağını inceleyeceğiz.

Neden Kısmi Homomorfik Şifreleme (PHE)?
Tam Homomorfik Şifreleme (FHE), şifreli veriler üzerinde rastgele her türlü hesaplamanın sinirsiz sayida yapılmasına olanak tanisa da beraberinde ciddi dezavantajlar getirir: Yüksek işlemci yükü, devasa anahtar boyutları ve yüksek bellek gereksinimleri. Birçok pratik kurumsal kullanım senaryosunda ise yalnızca toplama veya çarpma gibi belirli matematiksel işlemlere ihtiyaç duyulur. Bu noktada Kısmi Homomorfik Şifreleme (PHE) tercih etmek size şunları kazandırır:
-
Hız: Belirgin şekilde daha hızlı işlem süreleri.
-
Düşük Kaynak Tüketimi: Çok daha küçük şifreli metin (ciphertext) ve anahtar boyutları.
-
Bellek Verimliliği: Bellek kısıtı olan arka plan sistemleri ve mikroservisler için ideal yapı.
lightphe4j Neleri Destekliyor?
lightphe4j, Java ekosistemine kapsamlı bir eşşekilli algoritma seti kazandırıyor:
-
Toplamsal Eşşekilli (Additively Homomorphic): Paillier, Damgard-Jurik, Exponential ElGamal, Elliptic Curve ElGamal, Benaloh, Naccache-Stern, Okamoto-Uchiyama.
-
Çarpımsal Eşşekilli (Multiplicatively Homomorphic): RSA, ElGamal.
-
Kısmen/Bir Dereceye Kadar Eşşekilli (Somewhat Homomorphic): Boneh-Goh-Nissim (toplama işlemini ve tek bir çarpma işlemini destekler).
-
Mantıksal / Bit Düzeyinde (Bitwise): Goldwasser-Micali (XOR), Sander-Young-Yung (AND).
Buna ek olarak, kütüphane tam bir diller arası (cross-language) uyumluluk sunar: Python sürümünden JSON formatında dışa aktarılan anahtar çiftleri doğrudan Java’ya yüklenebilir ve bunun tersi de geçerlidir.
Başlangıç
lightphe4j kullanımı için Java 17 veya üzeri bir sürüm gereklidir ve kütüphaneye Maven Central üzerinden erişilebilir.
Maven Bağımlılığı
Projenizin pom.xml dosyasına aşağıdaki bağımlılığı ekleyebilirsiniz:
|
1 2 3 4 5 6 7 8 9 |
<dependency> <groupId>io.github.serengil</groupId> <artifactId>lightphe4j</artifactId> <version>0.0.25</version> </dependency> |
Pratik Kullanım Örnekleri
1. Gizli Hesaplamaları Bulut Ortamına Devretmek (Paillier)
Bir istemcinin, çalışanların maaş bilgilerini veya gizli anahtarını güvenilmeyen bir bulut sunucusuna açmadan maaş güncellemelerini hesaplaması gerektiğini düşünelim:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
import io.github.serengil.lightphe.LightPHE; import io.github.serengil.lightphe.model.Ciphertext; import java.math.BigInteger; public class PayrollExample { public static void main(String[] args) { // Toplamsal eşşekilli bir kriptosistem başlat LightPHE cs = LightPHE.builder() .algorithmName("Paillier") .build(); long baseSalary = 10000; // USD cinsinden taban maaş long bonus = 500; // USD cinsinden prim // Düz metinleri şifrele (İstemci tarafında veya kurum içinde yapılabilir) Ciphertext c1 = cs.encrypt(baseSalary); Ciphertext c2 = cs.encrypt(bonus); // Eşşekilli Toplama: Güvenilmeyen bulut altyapısında çalıştırılabilir Ciphertext cTotal = c1.add(c2); // Eşşekilli Skaler Çarpma: %5 oranında zam uygula double multiplier = 1.05; Ciphertext cAdjusted = c1.multiply(multiplier); // Şifre Çözme: Özel anahtar kullanılarak yalnızca güvenli kurum içi ortamda yapılır BigInteger totalResult = cs.decrypt(cTotal); BigInteger adjustedResult = cs.decrypt(cAdjusted); System.out.println("Toplam Maaş: $" + totalResult); // Çıktı: 10500 System.out.println("Zamlı Taban: $" + adjustedResult); // Çıktı: 10500 } } |
2. Gizliliği Koruyan Vektör (Vector Embedding) İşlemleri
Modern yapay zeka ve arama sistemlerinde, hassas verileri ifşa etmeden vektöri karşılaştırmak kritik önem taşır. lightphe4j, Java’nın Fork-Join havuzu aracılığıyla çok çekirdekli işlemciler üzerinde paralelleştirilmiş matris işlemlerini destekler.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
import io.github.serengil.lightphe.LightPHE; import io.github.serengil.lightphe.model.EncryptedTensor; import java.util.List; public class VectorEmbeddingExample { public static void main(String[] args) { LightPHE cs = LightPHE.builder() .algorithmName("Paillier") .build(); // Düz metin öznitelik vektörleri List<Number> embedding1 = List.of(1.005, 2.05, 3.6, 4.0, 4.02, 3.5); List<Number> weights = List.of(1.03, 2.04, 3.05, 7.02, 2.01, 1.06); // Tensoörü kullanılabilir tüm işlemci çekirdeklerine dağıtarak şifrele EncryptedTensor encryptedTensor = cs.encryptTensor(embedding1); // Şifrelenmiş vektör ile şifrelenmemiş ağırlıkların nokta çarpımını (dot product) hesapla EncryptedTensor encryptedDotProduct = encryptedTensor.matmul(weights); // Sonucu güvenli ortamda deşifre et List<Double> result = cs.decryptTensor(encryptedDotProduct); System.out.println("Deşifre Edilen Nokta Çarpımı: " + result.get(0)); } } |
3. Çapraz Platform Anahtar Yönetimi (Python | Go <-> Java)
lightphe4j, Python ve Go kütüphanesi (lightphe) ile ortak bir serileştirme biçimi paylaştığından, Python’da bir veri bilimi ekibi tarafından oluşturulan anahtarlar doğrudan bir Java kurumsal servisine yüklenebilir.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import io.github.serengil.lightphe.LightPHE; import java.nio.file.Path; public class KeyManagementExample { public static void main(String[] args) { // Kurum İçi (On-Premises): Anahtar çiftini oluştur ve dışa aktar LightPHE onPrem = LightPHE.builder().algorithmName("Paillier").build(); onPrem.exportKeys(Path.of("secret.json")); onPrem.exportKeys(Path.of("public.json"), true); // Sadece açık anahtar // Güvenilmeyen Bulut Düğümü: SADECE açık anahtarı yükle LightPHE cloudService = LightPHE.builder() .algorithmName("Paillier") .keyFile(Path.of("public.json")) .build(); // cloudService artık şifreleme ve hesaplama yapabilir, ancak deşifre EDEMEZ } } |
Ekosisteme Genel Bakış
LightPHE, teknoloji yığınınıza bağlı olarak farklı dillerde tutarlı API’ler sunacak şekilde tasarlanmıştır:
| Dil | Repo | Amac |
| Python | lightphe | Yapay Zeka Prototipleme & Veri Bilimi |
| Go | lightphe-go | Kurumsal Sistemler & Finans Uygulamaları |
| Java | lightphe4j | Yüksek Başarımlı Mikroservisler |
| Typescript | lightphe-ts | Web Uygulamaları & Node.js Edge Servisleri |
Sonuç
lightphe4j ile LightPHE ekosistemini Java’ya taşıyarak, artık geliştiricilerin Python araştırmalarında oluşturdukları homomorfik şifreleme modellerini yüksek performanslı kurumsal sistemlere aktarmaları mümkün hale geliyor.
Projeyi GitHub üzerinden inceleyebilir, yararlı bulduysanız star ⭐️ vererek destekleyebilir ve katkıda bulunabilirsiniz!
-
GitHub Deposu: serengil/lightphe4j
-
Maven Central:
io.github.serengil:lightphe4j