Güvenlik
GPG ile Gizimleme

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:

  1. Açık ve Özel açar çifti oluştur,
  2. Bu açarları oku,
  3. Okunan Özel açar ile bi yazı gizimle,
  4. Gizimlenmiş yazıyı çöz,
  5. 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 openpgpjs (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.