GPG ile Gizimleme Nasıl Yapılır?
Bu yazıda GPG ile gizimleme işlemini, NodeJS üzerinde gerçeklenmesi ve alınabilecek güvenlik önlemleri hakkında bilgi verilmiştir. GPG hakkında bilgi edinmek için henüz okumadıysanız GPG Nedir? yazımızı okuyabilirsiniz.
GPG ile Gizimleme Gerçeklemesi
GPG ile gizimleme yapan bir kod yazalım. Bunun için öncelikle işlem dizimimizi(algoritmamızı) tanımlamamız gerekiyor.
İşlem Dizimi
Uygulamamızın yapacağı işlemler şunlardır:
- Açık ve Özel açar çifti oluştur,
- Bu açarları oku,
- Okunan Özel açar ile bi yazı gizimle,
- Gizimlenmiş yazıyı çöz,
- Bitir.
İşlem dizimini şu şekilde kuşbakışı gerçekleyebiliriz:
const baslat = async () => {
// Açık ve Özel açar çifti oluştur
const [ozelAcar, acikAcar] = await acarCiftiOlustur();
const acikAcarVerisi = await acarOku(acikAcar);
const ozelAcarVerisi = await acarOku(ozelAcar);
// Gizimle
const gizimlenmisVeri = await gizimle('Ay yıldızımız uzayda!', [acikAcarVerisi]);
console.log('Gizimlenmiş Veri:', gizimlenmisVeri);
// Çöz
const cozulmusVeri = await coz(gizimlenmisVeri, ozelAcarVerisi);
console.log('Çözülmüş Veri:', cozulmusVeri);
}
baslat();
NodeJS üzerinde GPG işlemlerimiz için openpgp
js (opens in a new tab) kütüphanesini kullanacağız.
Şimdi bu kuşbakışı yazdığımız kodun alt işlevlerini yazalım.
Açar Çifti Oluşturma
Öncelikle açar çifti oluşturma işlevimizi tanımlıyoruz. Bu işlev, Açık ve Özel açar çiftini oluşturup, Özel açarın iptal sertifikasını da döndürecektir.
import { generateKey } from 'openpgp';
const acarCiftiOlustur = async () => {
// GPG açar çiftini oluştur
const {
privateKeyArmored: ozelAcar,
publicKeyArmored: acikAcar,
revocationCertificate: iptalSertifikasi
} = await generateKey({
userIds: [{ name: 'Düğüm #1', email: 'dugum-1@certificatum.com.tr' }],
curve: 'ed25519', // ED25519 Eliptik Eğri Algoritması seçtik.
})
console.log('Özel Açar:', ozelAcar);
console.log('Açık Açar:', acikAcar);
console.log('İptal Sertifikası:', iptalSertifikasi)
return [ozelAcar, acikAcar, iptalSertifikasi];
}
Özel açar, sadece bizde durması gereken açardır. Güvenli bir ortamda oluşturup saklamamızda yarar var.
Açık Açar Sunucularını Kullanma ve İptal Sertifikası
Oluşturduğumuz açık açarı bir açar sunucusuna yükleyebiliriz. Bu sayede iletişim kurmak isteyen kişiler bu açık açarı kullanarak bize iletişim kurabilirler.
Açık açar sunucuları için verebileceğimiz örnek bulunaklar: keyserver.ubuntu.com (opens in a new tab), pgp.mit.edu (opens in a new tab), keys.openpgp.org (opens in a new tab).
İptal Sertifikası ise eğer ki özel açarımızı kaybedersek ya da çaldırırsak, sunucular üzerindeki açık açarımızı iptal etmemizi sağlayacak. Bu sayede iletişim kurmak isteyen kişiler eğer bu açarla gizimlerlerse başkası tarafından çözülebileceğini ya da bizim tarafımızdan okunamayacağını bileceklerdir.
Gizimleme
İleti gizimleme ve çözme işlemleri için encrypt
ve decrypt
işlevlerini kullanacağız.
import {encrypt, decrypt} from 'openpgp';
const gizimle = async (yazi, alicilar = []) => {
const { data: gizimlenmisVeri } = await encrypt({
message: await createMessage({ text: yazi }),
encryptionKeys: alicilar,
})
return gizimlenmisVeri
}
const coz = async (gizimlenmisVeri, ozelAcar) => {
const { data: cozulmusVeri } = await decrypt({
message: await readMessage({ armoredMessage: gizimlenmisVeri }),
decryptionKeys: [ozelAcar],
})
return cozulmusVeri
}
Açarları Okuma
generateKey
ile oluşturduğumuz ve ya başkaları tarafından bizimle paylaşılan açarları readKey
işlevi ile okuyabiliriz.
import {readKey} from 'openpgp';
const acarOku = async () => await readKey({ armoredKey: ozelAcar });
Güvenlik Önlemleri
- GPG kullanımının riskleri hakkında bilgi sahibi olun.
- Güvenli bir algoritma kullanın. Yukarıdaki örnekte ED25519 Eliptik Eğri Algoritması kullandık.
- Açarlarınızı güvenli bir ortamda oluşturun, hatta internete bağlı olmayan bir bilgisayarda oluşturup, özel açarı burada saklamanızda fayda var. Kripto varlıkları saklamak için kullanılan soğuk cüzdanlar da bu mantıkta çalışırlar
- Özel açarınızı kesinlikle başkalarıyla paylaşmayın.
- Özel açarı güvenli bir ortamda saklayın. USB bellekler gibi erişimi kolay ortamlara yazmayın. Git gibi ortamlarda kod paylaşımı yaparken sızabileceği için tasarınızın kod tabanınında doğrudan tutmayın.
- Özel açarınızı kaybederseniz, iptal sertifikası ile açık açarınızı iptal etmeyi hatırlayın.
- Açık kaynaklı kütüphanelere güvenmeyin, inceleyin! Örnekte kullandığımız
opengpg
kütüphanesinde bulunabilecek, açar üretme ve okuma işlevlerindeki olası güvenlik açıkları, yazacağınız uygulamada güvenlik açığı olması anlamına gelir. Bu yüzden gerçeklemede kullandığınız kütüphaneleri, ve bu kütüphanelerle ilgili yayımlanan güvenlik açıklarını(CVE) inceleyin ve güvenli olduğundan emin olun.
Sorumluluk Reddi
Bu yazı eğitim amacıyla hazırlanmış olup; işlem dizimi(algoritma) ve yöntem tavsiyesi taşımaz. Belge içeriğinde yer alan bilgilerin kullanımından doğabilecek zarar ve/veya kayıplardan dolayı Certificatum sorumlu tutulamaz.
Telif Hakkı ve Lisans
Telif Hakkı 2024 © Certificatum.
Bu sayfada yer alan içeriklerin bağlantı/kaynak gösterilmeden kullanılması, telif hakkı ihlali sayılır.