Aynı anahtar zincirini kullanarak birden fazla bilgisayarı idare etmek için bu adımları tekrarlamak mümkündür. Her bilgisayar kendi anahtarına ve bir ihtimalle kendi çekirdeğine sahip olacaktır. Bu yönergeler bilgisayar isminin laptop olduğunu farzeder; bu adımları her tekrarladığınız sefer bilgisayarınızın adını buna göre ayarlayınız.
Hayır, dur, beni dinle. Verinin yedeğini al. Gerçekten. Yaptığın bir hatadan dolayı şifrelediğin diskin şifresini çözememek zevk vermez. Bu araçlar kuvvetli sırdırlar; eğer verinizi uçurursanız, Bilgisayar Dahilerini çağırıp onların verilerinizi geri getirmelerini umamazsınız. Bu alıştırmanın ana noktası budur.
Bütün diskinizi şifreliyorsanız (tavsiye edilir), /dev/hda'yı sizin disk aygıtınız ile değiştirin.
bash# ln -s /dev/hda /tmp/asset
Eğer bir bölümü şifreliyorsanız (çoklu önyükleme durumu), /dev/hda3'ü sizin bölümünüzün aygıtı ile değiştirin.
bash# ln -s /dev/hda3 /tmp/asset
Sadece bir dosya şifreliyorsanız, ~/encrypted dosyasını sizin dosyanız ile değiştirin ve /tmp/keychain isminde anahtar dosyanızı kaydedeceğiniz yeri (hazırda bulunan çıkarılabilir ortam, örneğin: /mnt/cf) işaret eden bir sembolik bağ oluşturun.
bash# ln -s ~/encrypted /tmp/asset
bash# ln -s /mnt/cf /tmp/keychain
Şifrelenecek verinizi rasgele veri ile hazırlayın. Bu saldırganın hangi bölümlerin boş alan olduğunu bulmasını zorlaştıracktır.
bash# shred -n 1 -v /tmp/asset
Burada anahtarları bulunduracak şifreli bir dosya sistemi oluşturuyoruz. Daha fazla şifreleme, ister misiniz? Evet, anahtar deponuzun çalınması durumunda (
Tablo 4.1), anahtarlarınızın ortaya çıkmasını istemezsiniz. Dosya sisteminin boyutu olarak 1 MB seçtim çünkü yuvarlak bir rakam. Anahtarlar için bu kadar bir alana ihtiyacımız olmayacak, o zaman isterseniz daha ufak bir boyut seçebilirsiniz (her anahtar 61 byte uzunluğundadır).
Tekrar rasgele veri ile ilklendirin.
bash# cd /tmp/initrd
bash# head -c 1m /dev/urandom > keys
Parolayı sözlük saldırılarına dayanıklı kılmak için tohum üreteceğiz. Ne zaman <seed> sembolünü görürseniz, onu sizin oluşturduğunuz ile değiştirdiğinizden emin olun. Şu komut ekranda rasgele bir tohum gösterecektir.
bash# head -c 15 /dev/random | uuencode -m - | head -2 | tail -1
Tohumu kullanarak geridönüş aygıtını kurun. Parolanızı burada seçiyorsunuz. Unutmayacağınız birşey seçin.
Diceware yöntemini güvenli bir parola seçmek için kullanmak isteyebilirsiniz.
bash# losetup -e AES128 -C 100 -S <seed> -T /dev/loop1 keys
Anahtar dosya sistemini biçimlendirin ve bağlayın (
decrypt.sh betiği
ext2 dosya sistemini kullandığınızı farzeder).
bash# mke2fs /dev/loop1
bash# mkdir /tmp/keys
bash# mount /dev/loop1 /tmp/keys
Şimdi gerçek şifrelenecek verinin anahtarı için 45 byte, bilgisayarınızın oluşturabildiği kadar rasgele seçilmiş olsun. Saldırgan, şimdi sözlük saldırısı deneyebilir! Haha! Anahtarı laptop diye isimlendirdiğimiz bilgisayar adından sonra isimlendiririz. Bunun yerine bilgisayarınızın adını kullanın.
bash# head -c 45 /dev/random | uuencode -m - | head -2 | tail -1 > /tmp/keys/laptop
Şifrelenecek veriye şifreli erişim sağlayan geridönüş aygıtını anahtar ile birlikte kurun.
bash# losetup -e AES128 -p 0 /dev/loop0 /tmp/asset < /tmp/keys/laptop
Anahtar dosya sistemini devreden çıkarın.
bash# umount /tmp/keys
bash# losetup -d /dev/loop1
Sadece bir dosya şifreliyorsanız bu bölümü atlayın.
mkswap'a boyut parametresi vermek kritiktir, çünkü bu komutu sadece ona adanmış bir bölüm için kullanmıyoruz. İstediğiniz boyutu seçin, ben 2GB seçtim.
bash# mkswap /dev/loop0 $((2*1024*1024))
mkswap: warning: truncating swap area to 2097144kB
Setting up swapspace version 1, size = 2147471360 bytes
Sadece bir dosya şifreliyorsanız, bunun gibi bir dosya sistemi ile şifreleyin ve
Betikler bölümüne atlayın.
Takas alanından sonra kök 'bölümünü' oluşturacağız. 'bölüm' kelimesini tırnak içinde yazıyorum çünkü gerçek bir bölüm değildir. losetup'ın -o göreli konum argümanını kullanarak onu yanıltıyoruz.
mkswap'in takas alanın istenen boyutta olması gerekmeyen gerçek boyutunu bize nasıl belirttiğine dikkat edin. Göreli konumu kök dosya sistemine başlamak için belirlerken gerçek boyutu (yukarıdaki örnekte 2147471360 idi) kullanın.
bash# losetup -o <root offset> /dev/loop1 /dev/loop0
Eğer şifrelenecek veri bütün disk ya da diskin son bölümü ise, o zaman dosya sistemi için bir boyut belirliyeceğiz diye telaşa gerek yoktur. Sizin durumunuz buna uyuyor ise aşağıdakileri yapın ve
initrd Bağlama Noktasıkısmına geçin.
Şifrelenecek veri diskin son bölümü olmadığı için, mkfs'e boyut kısıtlaması vermek zorundayız ya da bunun ile diskin sonu arasındakı bütün bölümlere yazılacaktır. Tekrarlıyorum, eğer mkfs'e doğru boyutta parametre vermez iseniz, veri kaybına uğrayabilirsiniz. mkfs aslında sadece bir ön uçtur, dolayısı ile azami ölçüde dikkatli olmak için gerçek bir dosya sistemi oluşturucusu seçeceğiz, bu durumda mke2fs'i.
Dosya sisteminin boyutunu öbeklerle belirtmek sureti ile kısıtlamak mümkündür, fakat mke2fs öbek boyutunu dosya sisteminin boyutuna dayanarak seçer. Klasik Catch-22! Bizim için öbek boyutun ne seçileceğini bulabilir (istediğimizden de fazlası).
bash# mke2fs -n -j /dev/loop1
mke2fs 1.34-WIP (21-May-2003)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
9781248 inodes, 19544448 blocks
977222 blocks (5.00%) reserved for the super user
First data block=0
597 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424
Bu durum için 4096 seçti. Ne seçerse seçsin bizim dosya sistemimiz için yakın bir değerdir. Doğru boyutu blok cinsinden hesaplayınız.
dosya sistemi boyutu = (bölüm boyutu - takas alanın boyutu) / blok boyutu
Bölümün boyutunu 10GB ve takas bölümünün boyutunu 2GB farzedin. mke2fs için doğru boyut:
(10 - 2) x 230 / 4096 = 2097152
Yanlış anlamayın! Yedekleme yapın! İki kere ölçün, bir kere biçin!
bash# mke2fs -j /dev/loop1 2097152
Yeni kök dosya sistemini bağlayın ve
initrd bağlama noktasını oluşturun. Bu
linuxrc betiğinin
pivot_root çağrısı için gereklidir.
bash# mount /dev/loop1 mnt/new-root
bash# mkdir mnt/new-root/initrd
bash# umount mnt/new-root