Raspberry Pi 5 ve UART

Raspberry Pi 4 ve öncesinde, UART üzerinden cihazlarla haberleşmek için "/boot/config.txt" dosyasında aşağıdaki satırı ekleyerek aktif edebiliyorduk.  enable_uart=1 Raspberry Pi 3 cihazımdaki sistemi Raspberry Pi 5 sisteme yükseltince, ntp için kullandığım UART üzerindeki GPS modülüm çalışmamaya başladı. PPS sinyali düzgün çalışırken, NEMA verisinin gelmediğini farkettim. Kalitesiz bir bağlantı üzerinde olduğum için ntp offset sapıtmaya başlamış. Raspberry Pi 5 ile büyük değişiklik yapılmış. Ana UART bir sokete taşındığından enable_uart ile sadece soketteki UART aktif oluyor. GPIO 14 - 15 üzerinden bağladığımız cihaza bağlanamıyoruz. GPIO 14 - 15 üzerindeki UART ı aktif hale getirmek için "/boot/config.txt" dosyasında aşağıdaki overlay'i kullandım. dtoverlay=uart0-pi5 Bu overlayı tanımladıktan sonra UART pinlerine bağladığım GPS modülünden veri almaya başladım.

SSH Şifresiz Giriş

Secure Shell kısaltması olan SSH, uzaktaki bir sisteme güvenli bir kanal üzerinden erişim sağlamanızı sağlayan bir protokoldür. Bu sisteme giriş yapabilmek için, ilk başta kim olduğunuzun tespit edilmesi gerekir. Yapılacak bu tespit üzerinden yetkilerinizi kullanabilirsiniz. En çok kullanılan tanımlama yöntemi ise "kullanıcı adı", "şifre" ikilisidir. Şifre sisteminin bilinen zayıflıklardan ilki olan, şifreniz kolay tahmin edilebilir olduğunda şifrenizin kırılma ihtimali artmakta ve güvenlik seviyeniz düşmektedir. Diğer zayıf noktası ise, bu şifre iki taraf tarafından bilinen bir şifredir. Doğrulama sistemi simetrik olduğu için kendinizi sisteme tanımlama esnasında sisteme bir şifre vermeniz gerekmektedir. Karşı tarafın şifreyi tutma şeklinden veya bu şifre belirleme protokolü esnasında üçüncü bir kişinin araya girmesine kadar, bu sürecin zayıf noktaları bulunmaktadır. Bu zayıf noktalarda oluşabilecek herhangi bir zaafiyette karşı sisteme erişimin başkasının eline geçmesi ihtimali de artmaktadır. Bu şifre iki taraf arasında paylaşılan özel bir şifre olduğu için, aynı şifreyi başka yerde kullanmanız durumunda, iki tarafın bilmesi gereken bir şifre üçüncü bir taraf ile de paylaşılmış duruma gelmektedir. Simetrik sisteme alternatif olan asimetrik sistemde, bir özel anahtar  (private key)  genel anahtar (public key) ikilisi oluşturur ve genel anahtarı istediğiniz kadar kişiye paylaşabilirsiniz. Özel anahtarınız, bu genel anahtarın sahibi olduğunu ispat ettiğinden, genel anahtarın sahipliğini ispat ederek sisteme giriş yapabilirsiniz. Bu şekilde, simetrik sistem ile her bir sisteme özel bir şifre oluşturmak yerine, asimetrik sistemde tek bir anahtar ile bütün sistemlere erişim sağlayabilirsiniz. Tek bir anahtar ile bütün sistemlere erişim sağlayabiliyor olmanız, sahip olduğunuz özel anahtara çok büyük bir güç vermektedir. Bu özel anahtarı korumak en önemli önceliktir. Eğer bu özel anahtarınız başkalarının eline geçecek olursa, bu anahtarı ele geçiren kişi sizin yerinize genel anahtarın sahibi olduğunu rahatlıkla ispat edebilecektir.

Özetle, doğrulama yöntemleri simetrik ve asimetrik olarak ikiye ayrılırlar. Kullanıcı şifre yönteminde, kullanılan şifre iki taraf arasında paylaşılan bir bilgi olduğu için simetriktir. Simetrik sistemlerde doğrulamayı sağlayan gizli bilgi iki taraf için ortaktır ve bu iki tarafa özeldir. Bu şifrenin paylaşılması durumunda güvenlik çökecektir. Asimetrik sistemlerde özel anahtar ve genel anahtar olarak birbirini tamamlayan anahtar çifti oluşturulur. Özel anahtar kişiye özel olup hiç kimse ile paylaşılmaz. Genel anahtar ise herkesle paylaşabileceğiniz ve özel anahtara sahip olduğunuzu onun üzerinden ispat edeceğiniz anahtardır. Özel anahtarın paylaşılması durumunda güvenlik çökecektir. 


İhtimaller ve Güvenlik Seviyesi

Şifreniz ne kadar uzun olursa, kombinasyonunuz o kadar fazla olur. Kombinasyonun daha fazla olması, şifrenizin kolay tahmin edilmesini zorlaştırır. Ayrıca insan beyninin rastgele düşünememesi sebebiyle, bireylerin belirlediği şifrelerin tahmin edilebilmesi daha da kolaydır. Genel olarak bilgisayarın ürettiği 6 6 karakterlik bir şifre bir insanın "rastgele" oluşturduğu 8 karakter şifreye göre daha güvenli olabilir. Eğer güvenli bir şifre oluşturmak istiyorsanız, sistem tarafından rastgele oluşturulan bir şifreyi kullanmak daha güvenli olacaktır. Oluşturduğunuz şifrenin 2lik sistemde kaç bitlik olduğunu hesaplamak için

charset = Şifrenizi oluşturan harf kümesinin eleman adedi
length = Şifrenizin uzunluğu

\begin{equation}bits = \log _{2}(charset^{length})\end{equation} \begin{equation}bits = length \log _{2}(charset)\end{equation}

Örneğin sadece rakamlardan oluşan 6 hanelik bir şifrenin kombinasyonu kaç bittir hesaplamak istersek;
\begin{equation}charset = 10, length = 6\end{equation}
\begin{equation}bits = 6 \log _{2}(10)\end{equation}
\begin{equation}bits = 19.93\end{equation}
Rakamlardan oluşan 6 hanelik bir şifrenin 19.93 bit diyebiliriz. Bunun anlamı ise, her bir şifreyi sırayla numaralandırırsak, bütün hepsini gösterebilmek için 20 bitlik bir sayıya ihtiyacımız var demektir.

Örnek Karaktersetleri:
AdİçerikUzunluk
Sayı[0-9]10
Büyük Harf[A-Z]26
Büyük Harf, Sayı[A-Z0-9]36
Harf, Sayı[A-Za-z0-9]62
Harf, Sayı, Noktalama[A-Za-z0-9] + noktalama95

Örnek Bit Uzunlukları:
Karakter Seti
Şifre Uzunluk 10 kar 26 kar 36 kar 62 kar 95 kar
4 kar 13.3 bit 18.8 bit 20.7 bit 23.8 bit 26.3 bit
6 kar 19.9 bit 28.2 bit 31.0 bit 35.7 bit 39.4 bit
8 kar 26.6 bit 37.6 bit 41.4 bit 47.6 bit 52.6 bit
12 kar 39.9 bit 56.4 bit 62.0 bit 71.5 bit 78.8 bit
16 kar 53.2 bit 75.2 bit 82.7 bit 95.3 bit 105.1 bit

Bit uzunluğu arttıkça ihtimal sayısı artar ve şifrenizin deneme yanılma ile bulmasını zorlaştırır. 2 bitlik sisteme çevirme amacımız güvenlik seviyelerinde karşılaştırma yapabilmektir.

NIST SP-800-57 tavsiye anahtar uzunlukları karşılaştırma tablosu
Güvenlik Seviyesi Simetrik Asimetrik Ayrık Logaritma Asimetrik Çarpan Ayırma Asimetrik Eliptik Eğri
80 bit 80 bit L=1024 bit N=160 bit k=1024 bit f=160 bit - 223 bit
112 bit 112 bit L=2048 bit N=224 bit k=2048 bit f=224 bit - 255 bit
128 bit 128 bit L=3072 bit N=256 bit k=3072 bit f=256 bit-383 bit
192 bit 192 bit L=7680 bit N=384 bit k=7680 bit f=384 bit-511 bit
256 bit 256 bit L=15360 bit N=511 bit k=15360 bit f=512+ bit

Yukarıdaki tabloda verilen kolonlarda, RSA anahtarları "Çarpan Ayırma" algoritma ailesine, ed25519 anahtarları ise "Eliptik Eğri" algoritma ailesine aittir. Bu tabloları şu şekilde okuyabilirsiniz. 1024 bitlik bir RSA anahtarı 80 bitlik simetrik güvenlik seviyesine yakın olduğu varsayılır ve büyük harf, küçük harf, rakam ve noktalama işaretlerini içeren 95 karakterlik bir kümeden oluşturulan 12 karakter uzunluğundaki rastgele sayı üreteci tarafından üretilmiş bir şifre ile denktir. İnsan tarafından rastgele üretilen bir şifre için en az 16 karakter uzunluğunda olması gerekir. 2048 bitlik RSA anahtarına denk olabilmesi için rastgele sayı üreteci tarafından üretilmiş şifrenin 17 karakterli olması beklenir. Eliptik Eğri ailesine ait 256 bitlik bir anahtarın güvenlik seviyesi 128 bit olup bu seviyeye 20 karakterlik bir şifre ile erişebilirsiniz.Aynı seviyeye sadece rakamlardan oluşan bir şifre ile erişmek istendiğinde rastgele sayı üreteci tarafından üretilmiş 40 rakamlık bir şifre gerekmektedir. 

Not: Bilgisayarda bulunan rastgele sayı üreteci algoritması, sadece belli şartlar sağlandığında rastgele kabul edilir.

RSA'nın zaman içinde devreden alınıp yerine Eliptik Eğri kullanımının yaygınlaştırılması yönünde eğilim mevcuttur. Her iki algoritmanın kendine göre avantaj ve dezavantajları bulunmaktadır. Temel olarak RSA daha eski bir algoritma ve dayanıklılık konusunda kendini ispat etmiş bir algoritmadır. Eliptik eğri daha yeni olduğu için yeterince test edilmediği ve açık bulunabileceği şüphesi içerirken, RSA ya göre çok daha kısa bit kullandığı için, hem hesaplama hızında hem depolama alanında çok büyük bir avantaj sağlamaktadır.


SSH Ayarlaması

SSH için anahtar kurulumu iki aşamadan oluşmaktadır. Birinci aşama, özel genel anahtar ikilisinin oluşturulması, ikinci aşama ise genel anahtarın hedef sistemde tanımlanmasıdır.
Özel genel anahtar ikilisini oluşturmak için aşağıdaki komutu çalıştırmanız yeterlidir. Sistemde OpenSSH kurulu olması yeterlidir.

ssh-keygen -t ed25519
Bu komut çalıştırıldıktan sonra sizden dosya ismini ve belirlemek isterseniz bir şifre belirlemenizi isteyecektir. Burada verdiğiniz şifre, dosyayı ayrıca şifrelemek için kullanılacaktır. Bu dosyayı açabilmek için bu şifreyi bilmeniz gerekmektedir. Bu ek bir güvenlik katmanı sağlamaktadır. Özel anahtarınızın başkasının eline geçmesi durumunda, özel anahtara ulaşabilmek için şifrenizi de bilmesi gerekecektir. Cep telefonunuzdaki pin kodu gibi çalışır. Eğer şifresiz özel anahtar oluşturursanız, bu dosyanın başkasının eline geçmesi durumunda hemen kullanabilecektir. Bu program yukarıda belirttiğiniz dosya isminde veya varsayılanı kullandıysanız, ".ssh" klasöründe "id_ed25519" ve "id_ed25519.pub" varsayılan dosya isimlerinde iki tane dosya oluşturacaktır. uzantısı olmayan dosya sizin özel anahtarınız olup bu dosyayı kimseyle paylaşmamanız gerekmektedir. ".pub" uzantılı olan dosya sizin genel (public) anahtarınızdır. Bu anahtarı başka sistemlerde tanımlamakta kullanacaksınız.
OpenSSH kurulu başka bir sisteme erişmek için o sistemdeki size ait ".ssh" klasöründe "authorized_keys" dosyasına eklemeniz gerekecektir. "authorized_keys" dosyası birden fazla genel anahtar içerebilir. Her genel anahtar alt alta dosyada sıralanır.

cat id_ed25519.pub >> ~/.ssh/authorized_keys
Eğer sistemde "authorized_keys" dosyası ilk defa oluşturuluyorsa okuma yazma izinlerinin "600" olması mecburiyeti vardır. Aksi halde OpenSSH güvenlik açığı sebebiyle bu dosyayı dikkate almayacaktır. Bu dosyaya erişmesini istemediğiniz kişilerin yazabilmesi, o kişilere erişim imkanı sağlayacaktır. İzinsiz erişmek isteyen kişi, bu dosyaya kendisine ait bir anahtarı girmesi durumunda, kendi anahtarı ile hemen erişebilecektir. Bu dosyanın, belli kişiler dışında değiştirilmemesi çok önemli olup, sistemde admin seviyesinde çalışan herhangi birisinin veya programın bu dosyayı rahatlıkla değiştirebileceğini de her zaman gözönünde bulundurun.
Hedef sistemde, izin verilen anahtar tanımı da tamamlandıktan sonra erişmek için aynı şekilde ssh yapmanız yeterli olacaktır. Sistem şifre sormak yerine, sizin özel anahtarınızı görecektir. Eğer dosyayı şifrelediyseniz, program şifre olmadan içeriğine erişemeyeceği için anahtarın şifresini soracaktır ve özel anahtarınza ulaşacaktır. Karşı sistem sadece özel anahtara sahip olan birisinin çözebileceği rastgele bir soru soracaktır. Özel anahtara sahip olan ssh programı, bu bilgiyi kullanarak problemin cevabını hesaplayıp cevap dönecektir. Bu şekilde hedef sistemde tanımlanan genel anahtarın sahibi olduğunu ispatlayıp sisteme giriş sağlayacaktır. Dikkat edilmesi gereken bir konu, SSH programı bu özel anahtarı o anlığına görebildiği için, o an için sistemde çalışan programların, özel anahtarın açıldığı andaki veriye erişememeleri de güvenlik açısından dikkate alınması gereken önemli bir konudur.


Sonsöz

Özet olarak, şifre gibi simetrik bir sistemde iki taraf tarafından ortak paylaşılan bir gizli bilgi olduğu için, bu bilginin korunması her iki tarafın sorumluluğunda iken asimetrik sistemde bu bilginin korunması görevi tek kişiye indirgenmiş olur. Simetrik sistemde her bir karşı taraf için ayrı bir gizli bilgi tanımlanması mecburidir. Asimetrik sistemde gizli bilgi sadece bir kişide olduğu için ve taraflara paylaşılan genel anahtarın herkesle paylaşılabilecek bir bilgi olması sebebiyle, aynı anahtar rahatlıkla birden fazla sisteme erişmek için kullanılabilir. Dolayısıyla birden fazla sisteme erişim durumunda, birden fazla şifreye göre fazla esneklik sağlamaktadır. Aynı anahtarın, farklı farklı sistemlerde kullanıldığı bir senaryoda, özel anahtarın başkasının eline geçmesi durumunda, bu kişinin bütün sistemlere tek seferde erişebilmesi söz konusudur. Bunun için ayrıştırılmak istenen sistemler için farklı anahtarlar oluşturulabilir.

Özel anahtarın, mevcut erişen sistemden ayrıştırılması için TPM, SmartCard gibi uygulamalar kullanılabilir. Böyle bir sistemde özel anahtar özel bir donanım içinde oluşturulur ve bu özel donanım bu anahtarı dış dünya ile hiçbir şekilde paylaşmaz. Donanım, sadece ürettiği özel anahtara ait genel anahtarı paylaşır. Bu genel anahtarın ispatı için sorulan sorulara donanımın kendisi cevap verir. Bu sayede ana sistemde hiç birşekilde özel anahtar açılmayacağı için, o sistemde çalışan programların özel veriye erişme ihtimali sıfırlanmış olur.

YubiKey gibi donanım anahtarları yeni oluşturulan FIDO2 standardını desteklemektedir. FIDO2 standardı Linux sistemlerde OpenSSH 8.1p1 Windows sistemlerde OpenSSH 8.9.1.0p1 versiyonlarında entegre edilmiş olup, bunu kullanabilmek için mevcut sistemlerin güncellenmesi gerekebilir. Zaman içinde FIDO2 standardı oluştuğunda, yukarıdaki anlatılan süreç daha kolaylaşacaktır. Erişmek için YubiKey veya TPM takılı sistemde Windows Hello gibi sistemler yeterli olacaktır. Bunun için yukarıda anlatılan yöntemden farklı parametrelerle kurulum yapılmaktadır.

Comments

Popular posts from this blog

Akıllı Cyborg Orduları mı geliyor?

Raspberry Pi 5 ve UART

8GB ve üstü RAM olan sistemlerde performans