background image

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.

background image

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 
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 
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.