Шифрование - тема очень актуальная. В многих случаях информация, идея - это самая дорогая часть проекта и нужно уметь ее защищать. Чем лучше защищаешь - тем спокойнее спишь. В России это особенно важно еще и потому, что весь бизнес построен на инсайде, знакомствах, корешах и других бесчестных принципах. Одним словом "подсмотри и укради". Так, конечно, быть не должно. В старые времена, когда я еще сидел под виндой, я пользовался программой PGP. Это работало, но немного муторно. Я знаю, что существуют и другие, более удобные решения - но всё равно они не так удобны и быстры, как в Linux. А в Linux я знаю несколько способов. Сразу обозначим - можно шифровать голый раздел целиком, а можно - сделать псевдо раздел внутри шифрованного файла. Меня чаще интересовал второй способ. == Способ 1 - cryptoloop == Это самый простой и надежный способ, который к сожалению, сейчас помечен как Depricated, и в Debian Testing, к примеру, уже не работает (Зато работает в Ubuntu, Gentoo и проч.). Суть простая - делаем файл, делаем loop-устройство, шифруем. Монтируем через fstab с легкостью. Сначала пробуем модули, компилим правильное ядро, если есть проблемы. # modprobe loop # modprobe cryptoloop # modprobe aes Дальше - всего несколько строк, о которых в деталях можно почитать в man losetup # dd if=/dev/urandom of=/home/somefile.dsk bs=1M count=50 # chmod 600 /home/somefile.dsk # losetup -e aes /dev/loop0 /home/somefile.dsk Password: Init (up to 16 hex digits): # mkfs -t ext2 /dev/loop0 # mount -t ext2 /dev/loop0 /mnt ..... # umount /mnt/ # losetup -d /dev/loop0 Чтобы в дальнейшем было легко монтировать, прописываем в fstab: /home/somefile.dsk /mnt ext2 noauto,users,loop,encryption=aes 0 0 Не забываем, что в /etc/modules, или аналогичный файл, желательно прописать модули loop,cryptoloop,aes в автозагрузку Замечания: * /dev/urandom в Linux - это медленно устройство. Для больших файлов - лучше использовать что-нибудь побыстрее. * В качестве шифров можно использовать DES,AES,BLOWFISH,TWOFISH,IDEA и другие, с разной длиной ключа. О стойкости и быстроте шифров - нужно читать отдельно и разбираться детально * Шифры должны быть собраны как модули или в компилены в ядро. В некоторых системах нужно устанавливать отдельные пакеты, типа aes-loop-utils. * На стационарных компьютерах лучше делать не маленькие файлы, а большие - чтобы на простой флешке враги не унесли, а помучались хотя бы - на какой носитель скинуть. Можно сделать наоборот - хранить шифрованный файл только на своей священной флешке, пользоваться по ночам, в месте, недоступном для врагов. == Способ 2 - dm-crypt == Вместо cryptoloop сейчас рекомендуется использовать dm-crypt. Это немного сложнее, однако и возможностей больше. # modprobe dm_mod # modprobe dm_crypt # modprobe aes # dd of=/home/secret.fs bs=1M count=100 # chmod 600 /home/secret.fs # losetup /dev/loop0 /home/secret.fs # cryptsetup -v -c aes -y create secretfs /dev/loop0 # cryptsetup status secretfs # dd if=/dev/zero of=/dev/mapper/secretfs # mke2fs -j -O dir_index /dev/mapper/secretfs # mount /dev/mapper/secretfs /mnt ... # umount /mnt # cryptsetup remove secretfs # losetup -d /dev/loop0 Для монтирования-размонтирования можно сделать такие простые bash-скрипты: secret_mount.sh losetup /dev/loop0 /home/secret.fs; cryptsetup create secretfs /dev/loop0; mount /dev/mapper/secretfs /mnt; secret_umount.sh umount /mnt; cryptsetup remove secretfs; losetup -d /dev/loop0; Можно обойтись и без скриптов - а просто прописать /etc/crypttab secretfs /home/secret.fs none cipher=aes-cbc-plain,size=256 /etc/fstab /dev/mapper/secretfs /mnt ext2 noauto,acl,user_xattr 0 0 == Способ 3 - dm-crypt + LUKS == Этот способ основан на тех же механизмах, что и предыдущий, но с использованием расширения LUKS, которое предоставляет немного более удобный и современный интерфейс управления. В интернете есть примеры, как шифровать раздел таким способом, но практически нет примеров, как шифровать отдельный файл для псевдораздела. Восполним этот пробел. В схеме инициализации отличаются только пара команд: # modprobe dm_mod dm_crypt aes # dd if=/dev/urandom of=/home/test.dsk bs=1M count=10 # chmod 600 /home/test.dsk # losetup /dev/loop0 /home/test.dsk # cryptsetup -v -c aes -s 256 luksFormat /dev/loop0 # cryptsetup luksOpen /dev/loop0 testdsk # mkfs.ext2 /dev/mapper/testdsk # mount /dev/mapper/testdsk /mnt/mycryptdisk ... # umount /mnt/mycryptdisk # cryptdisk luksClose testdsk # losetup -d /dev/loop0 В файл /etc/crypttab прописыываем testdsk /home/test.dsk none luks,noauto В файл /etc/fstab /dev/mapper/testdsk /mnt/mycryptdisk ext2 noauto,users 0 0 В дальнейшем, монтировать можно двумя командами: cryptdisks_start testdsk mount /mnt/mycryptdisk ...do something... cryptdisks_stop testdsk umount /mnt/mycryptdisk Замечания: * Для автозапуска процесса монтирования при загрузке нужно поднять автозапуск сервиса /etc/init.d/cryptdisks * Шифровать можно не только паролем - можно использовать файл с ключом. * dm-crypt (и LUKS) позволяет использовать несколько паролей/ключей, что бывает удобно, если один из паролей забываешь или теряешь. == Другие способы == Предыдущие примеры - это нативные способы шифрования в Linux. Но в репозитариях есть и готовые приложения, консольные и графические, и работать с ними начинающему пользователю может быть удобнее. На мой взгляд наиболее удобной программой является TrueCrypt - к сожалению, она не GNU и не во всех дистрибутивах входит в репозитарии, но с сайта можно скачать и установить необходимые исходники бесплатно. TrueCrypt поддерживает и консоль и графику. P.S. В Российской Федерации ЛЮБАЯ КОММЕРЧЕСКАЯ ДЕЯТЕЛЬНОСТЬ, связанная с использованием криптографических средств, подлежит обязательному лицензированию. Причем существующие условия закона настолько жесткие, что использовать шифры вне государственной деятельности практически невозможно. По этой причине - любое физическое лицо или организации легально может только "оказывать IT-услуги" и "сопровождать IT-проекты" без какого-либо любого даже самого маленького намека на криптографию. Получается, что защищаться можно только самостоятельно и в любом случае это нелегально. Гипербола конечно.
Linux/Windows Справочник v0.05 © 2007-2024 Igor Salnikov aka SunDoctor