www.hakin9.org
14
Hakin9 Nr 6/2004
Po
ds
ta
w
y
www.hakin9.org
15
Hakin9 Nr 6/2004
Przechowywanie poufnych danych
W
yobraźmy sobie następującą sytu-
ację: dostajemy nową pracę w fir-
mie zajmującej się projektowaniem
urządzeń elektronicznych i ich oprogramo-
wania. Przy podpisywaniu umowy nie obej-
dzie się bez złożenia podpisu pod dokumen-
tem o nazwie confidentiality agreement, wedle
którego wszystkie informacje, jakie otrzymuje-
my od firmy, bez względu na medium, są po-
ufne i podlegają ścisłej ochronie przed wycie-
kiem do osób nieupoważnionych. Ostatni, dłu-
gi akapit mówi co nam grozi, jeśli z naszej wi-
ny dojdzie do takiego wycieku.
Jednak aby pracować, potrzebujemy od
czasu do czasu zabrać ze sobą dokumenta-
cję czy kod źródłowy; używamy do tego celu
swojego laptopa. Co się stanie, jeśli go zgubi-
my albo ktoś nam go ukradnie i znajdzie na je-
go dysku katalog z dokumentami naszpikowa-
nymi słowami poufne? Rozsądnie jest zabez-
pieczyć się przed taką ewentualnością – zasta-
nówmy się więc, jak można to zrobić.
Szyfrowanie
pojedynczych plików
Jeśli poufnych plików mamy niewiele, zaś ich
rozmiar i ilość nie stanowią tajemnicy, możemy
Przechowywanie poufnych
danych w GNU/Linuksie
Piotr Tyburski
Jedyną gwarancją
bezpieczeństwa ważnych
informacji jest stosowanie
zaawansowanych algorytmów
kryptograficznych. Linuksowe
narzędzia umożliwiają
szyfrowanie pojedynczych
plików, wybranych katalogów
czy nawet całych partycji.
Przyjrzyjmy się metodom
szyfrowania poufnych danych.
wykorzystać pakiet gpg (Gnu Privacy Guard),
będący nowszym i publikowanym na licencji
GPL odpowiednikiem słynnego PGP (Pretty
Good Privacy). Oferuje on możliwość szyfro-
wania zarówno asymetrycznego (z kluczem
publicznym), jak i symetrycznego (patrz Ram-
ka Szyfrowanie symetryczne i asymetryczne).
Zacznijmy od takiej sytuacji: mamy ważną
specyfikację nowego projektu zapisaną w pliku
o nazwie DD32X.pdf. Chcemy ukryć jej treść
przed niepowołanym dostępem. Wydajmy za-
tem następujące polecenie:
$ gpg --output cyph1.1 --symmetric \
--cipher-algo TWOFISH DD32X.pdf
gpg zadaje nam pytanie o hasło, które będzie
zabezpieczać nasze dane, a następnie prosi
Z artykułu nauczysz się...
• jak za pomocą darmowych narzędzi zapewnić
kryptograficzną ochronę poufnych danych.
Powinieneś wiedzieć...
• powinieneś umieć korzystać z systemu Linux.
www.hakin9.org
14
Hakin9 Nr 6/2004
Po
ds
ta
w
y
www.hakin9.org
15
Hakin9 Nr 6/2004
Przechowywanie poufnych danych
o jego potwierdzenie. Hasło powinno
być skomplikowane i jednocześnie
łatwe do zapamiętania (patrz Ram-
ka Hasła z dużą entropią).
Przyjrzyjmy się wydanemu przez
nas poleceniu. Kazaliśmy gpg za-
szyfrować plik DD32X.pdf
korzy-
stając z szyfrowania symetryczne-
go (
--symmetric
), używając do tego
algorytmu TWOFISH (
--cipher-algo
TWOFISH
). Bez podania tej ostatniej
opcji wykorzystany zostałby algo-
rytm domyślny, czyli CAST5. Pli-
kiem wyjściowym miał być cyph1.1
(
--output cyph1.1
). Warto zauważyć,
że gdyby plik o takiej nazwie już ist-
niał, program zapytałby, czy chcemy
go nadpisać. Żeby być konsekwent-
nym, należy teraz możliwie bez-
piecznie skasować wersję jawną.
Zwykłe usunięcie pliku, na przy-
kład przez wydanie polecenia
rm DD32X.pdf
, nie jest bezpieczne.
Powoduje jedynie, że informacja
o pliku zostaje usunięta ze struktur
opisujących zawartość systemu pli-
ków, lecz sama treść pliku pozosta-
je na dysku (to tak, jakbyśmy usu-
nęli rozdział książki ze spisu treści,
lecz zapomnieli wyrwać z niej odpo-
wiednie kartki). W efekcie odpowied-
nio zdeterminowany intruz może
ukraść nasz dysk, a następnie przej-
rzeć jego niezajęty obszar i tam zna-
leźć resztki ważnego pliku (przypo-
mnijmy sobie choćby niedawną afe-
rę z dyskiem minister Jakubowskiej,
z którego w taki właśnie sposób od-
zyskano istotne informacje).
Aby zabezpieczyć się przed taką
ewentualnością, powinniśmy nadpi-
sać zawartość pliku. W tym celu wy-
damy polecenie:
$ shred -n 35 -z -u DD32X.pdf
Spowoduje to trzydziestopięcio-
krotne nadpisanie pliku śmieciami
(
-n 35
), następnie zerami (
-z
), a na-
stępnie jego usunięcie (
-u
).
Niestety, metoda ta nie jest sku-
teczna dla systemów plików z jour-
nalingiem (ext3, ReiserFS, xfs, jfs).
Journaling wiąże się bowiem z za-
pisywaniem w osobnym miejscu
(w tak zwanym dzienniku – ang. jour-
nal) dodatkowych informacji o zmia-
nach wprowadzanych w systemie pli-
ków (w systemie ext3 są to nie tylko
informacje o strukturze systemu, ale
nawet same dane). Jest to wykorzy-
stywane w razie problemów z odtwo-
rzeniem spójności systemu plików.
W tej sytuacji nie mamy gwarancji,
że wypełnienie pliku losowym cią-
giem powoduje całkowite usunięte
jego poprzedniej treści – systemy pli-
ków z journalingiem nie umożliwiają
całkowitego usuwania danych. Mimo
tych problemów korzystanie z pole-
cenia shred na pewno jest bezpiecz-
niejsze niż zwykłe usuwanie plików
przy użyciu rm.
Kiedy po pewnym czasie zechce-
my odszyfrować nasz plik, wydamy
polecenie:
$ gpg --output DD32X.pdf \
--decrypt cyph1.1
Szybki start – szyfrujemy pojedynczy plik
Aby zaszyfrować pojedynczy plik, na przykład DD32X.pdf, wydajemy polecenie:
$ gpg --output cyph1.1 --symmetric --cipher-algo TWOFISH DD32X.pdf
Zaszyfrowana wersja pliku zostaje umieszczona w pliku cyph1.1. Teraz możemy skaso-
wać jawną wersję pliku. Zróbmy to bezpiecznie:
$ shred -n 35 -z -u DD32X.pdf
Kiedy zechcemy odszyfrować plik, wystarczy wydać polecenie:
$ gpg --output DD32X.pdf --decrypt cyph1.1
Powyższy przykład zakłada, że mamy zainstalowany pakiet gpg lub korzystamy
z Hakin9 Live.
Szybki start – tworzymy zaszyfrowany katalog
Aby stworzyć zaszyfrowany katalog, wydajemy polecenie:
# encfs ~/.crypto ~/secret
Powoduje to utworzenie zaszyfrowanego katalogu ~/.crypto. Jego wersja rozszyfrowa-
na widoczna jest w katalogu ~/.secret (to w tym katalogu powinniśmy umieszczać pliki,
które chcemy chronić). Kiedy dostęp do zaszyfrowanego katalogu nie jest nam już po-
trzebny, odmontowujemy go poleceniem:
# fusermount -u ~/secret
Powyższy przykład zakłada, że mamy zainstalowany pakiet EncFS lub korzystamy
z Hakin9 Live.
Szybki start – tworzymy szyfrowany system plików
Aby stworzyć szyfrowany system plików o wielkości 100 megabajtów, wydajemy po-
lecenia:
$ dd if=/dev/urandom of=crypto.raw bs=1k count=100000
# losetup -e aes-256 /dev/loop0 crypto.raw
# mkfs.ext3 /dev/loop0
# losetup -d /dev/loop0
Powyższe polecenia powodują utworzenie szyfrowanego systemu plików w pliku cryp-
to.raw. Kiedy zechcemy w przyszłości korzystać z tego systemu plików, musimy pod-
montować go poleceniem:
# mount -t ext3 crypto.raw /mnt/crypt -oencryption=aes-256
System plików zostanie zamontowany do katalogu /mnt/crypt.
Przykład zakłada, że mamy odpowiednio skonfigurowane jądro i uaktualniony pa-
kiet util-linux (dokładny opis w odpowiednim HOWTO – patrz Ramka W Sieci) lub ko-
rzystamy z Hakin9 Live.