Журнал LinuxFormat - перейти на главную

LXF137:DrBrown3

Материал из Linuxformat
Перейти к: навигация, поиск

Содержание

Pretty Good Privacy

При­ме­ни­те свои но­вые знания о крип­то­гра­фии на прак­ти­ке, нау­чив­шись шиф­ро­вать и под­пи­сы­вать свои пись­ма с по­мо­щью GnuPG.

PGP Фи­ла Цим­мер­ма­на принес в мас­сы на­бор серь­ез­ных крип­то­гра­фи­че­ских тех­но­ло­гий в про­стой для уста­нов­ки фор­ме. На са­мом де­ле ПО на ва­шем ком­пь­ю­те­ре Linux ско­рее все­го при­над­ле­жит не пе­ру Цим­мер­ма­на, а бы­ло пе­репи­са­но (стан­дарт OpenPGP) Фон­дом сво­бод­но­го ПО. Он на­зы­ва­ет­ся GPG (GNU Privacy Guard – страж безо­пас­но­сти GNU).

Cердце GPG – ути­ли­та команд­ной стро­ки gpg, решаю­щая ба­зо­вые за­да­чи подпи­си, шиф­ро­вания и де­шиф­ра­ции со­об­щений, а так­же управ­ления клю­ча­ми. Ею мы и зай­мем­ся. В ва­шей про­грам­ме элек­трон­ной по­чты на­вер­ня­ка есть мо­дуль рас­ши­рения, скрыт­но применяю­щий эту ути­ли­ту для шиф­ро­вания, подписи и де­шиф­ра­ции поч­ты. Про­де­мон­ст­ри­руем его действие, пред­по­ло­жив, что Алекс хо­чет на­деж­но об­ме­нять­ся со­об­щения­ми с Бет.

Сперва Алекс генери­ру­ет па­ру от­кры­тый/за­кры­тый ключ:

$ gpg --gen-key

В от­вет на за­прос ути­ли­ты он вы­би­ра­ет клю­чи DSA и Эль Га­ма­ля и раз­мер клю­ча DSA 2048 бит. Его так­же ­про­сят ука­зать па­роль­ную фра­зу для за­щи­ты его за­кры­то­го клю­ча, а так­же имя, элек­трон­ный ад­рес и ком­мен­та­рий, для соз­дания иден­ти­фи­ка­то­ра поль­зо­ва­те­ля (User ID), оп­ре­де­ляющ­его вла­дель­ца клю­ча в удоб­ном для чтения ви­де. Те­перь от­кры­тый и за­кры­тый клю­чи Алек­са поя­ви­лись в фай­лах с рас­ши­рением GPG в ка­та­ло­ге .gnupg. И Алекс экс­пор­ти­ру­ет свой от­кры­тый ключ в файл ASCII:

$ gpg --export --armor -o alex.pub Alex

За­щи­та клю­ча оз­на­ча­ет его пред­став­ление в фор­ме ASCII, ко­то­рую мож­но, на­при­мер, на­пе­ча­тать или пе­ре­дать тек­стом по элек­трон­ной поч­те. По­следний ар­гу­мент (Alex) – фраг­мент иден­ти­фи­ка­то­ра поль­зо­ва­те­ля клю­ча, доста­точ­ный для его рас­по­знания. Файл результата – alex.pub – он планиру­ет пе­ре­дать Бет.

Бет де­ла­ет то же: соз­да­ет соб­ствен­ную па­ру клю­чей и па­роль­ную фра­зу и экс­пор­ти­рует от­кры­тый ключ в файл beth.pub, го­то­вый для пе­ре­да­чи Алек­су.

Про­цесс об­ме­на от­кры­ты­ми клю­ча­ми сло­жен, и я не бу­ду в него вда­вать­ся; пусть Алекс и Бет встре­тят­ся лич­но и об­ме­ня­ют­ся фай­ла­ми alex.pub и beth.pub на флэш­ках. Алекс встав­ля­ет флэш­ку Бет в свой ком­пь­ю­тер и им­пор­ти­ру­ет его в коль­цо клю­чей GPG:

$ gpg --import beth.pub

Бет, при­дя до­мой, им­порт­ри­ру­ет от­кры­тый ключ Алек­са в свое коль­цо клю­чей. Вы­ве­дя спи­сок сво­их клю­чей, Алекс те­перь уви­дит от­кры­тую часть сво­его клю­ча и клю­ча, по­лу­чен­но­го от Бет:

$ gpg --list-keys
/home/alex/.gnupg/pubring.gpg
-----------------------------
pub 2048D/B4DF979C 2010-08-02 [expires: 2010-08-30]
uid Alex Example (Demo User A) <alex@example.com>
sub 2048g/626C246D 2010-08-02 [expires: 2010-08-30]
pub 2048D/F6CA4978 2010-08-02 [expires: 2010-08-30]
uid Beth Example (Demo User B) <beth@example.com>
sub 2048g/07DFB736 2010-08-02 [expires: 2010-08-30]

Алек­су нуж­но сде­лать еще кое-что. пре­ж­де чем от­пра­вить Бет кон­фи­ден­ци­аль­ное со­об­ще­ние с по­мо­щью ее клю­ча. Ему нуж­но под­пи­сать ключ Бет, под­твер­див: он до­ве­ря­ет то­му, что ключ ее.

$ gpg --sign-key Beth

Так как она пе­ре­да­ла ему ключ лич­но, со­мне­ний у не­го нет. Поз­же я вер­нусь к во­про­су до­ве­рия клю­чам. Те­перь Алекс мо­жет от­прав­лять Бет шиф­ро­ван­ные со­об­ще­ния с по­мо­щью ее от­кры­то­го клю­ча. В знак вни­ма­ния он ре­ша­ет от­пра­вить ей сти­хи:

$ gpg --encrypt --armor --recipient Beth poetry.txt

У него по­яв­ля­ет­ся за­шиф­ро­ван­ный файл poetry.txt.asc для от­прав­ки Бет. Он зна­ет, что толь­ко Бет смо­жет его про­честь, по­то­му что толь­ко ей из­вестен за­кры­тый ключ, со­от­вет­ствую­щий от­кры­то­му клю­чу, ко­то­рым за­шиф­ро­ва­но со­об­щение.

Тут вы мо­же­те спросить, за­чем нуж­на па­ра клю­чей Алек­са. Ну, он уже восполь­зо­вал­ся сво­им за­кры­тым клю­чом для подпи­си (что­бы вы­ра­зить свое до­ве­рие) от­кры­то­го клю­ча Бет. Его от­кры­тым клю­чом, ра­зу­ме­ет­ся, мож­но за­шиф­ро­вать от­вет Бет Алек­су.

Но у Бет есть про­бле­ма. Она так­же да­ла свой от­кры­тый ключ Чарль­зу, Дэй­ву и Эри­ку, и хо­тя она ждет пись­ма от Алек­са, поч­та мо­жет прий­ти от лю­бо­го из ре­бят. В кон­це кон­цов, со­дер­жи­мое стро­ки «От ко­го» (From) в за­го­лов­ке элек­трон­но­го пись­ма лег­ко под­менить. Что­бы до­ка­зать под­лин­ность от­пра­ви­те­ля, Алек­су нуж­но подпи­сать свое пись­мо циф­ро­вой подпи­сью.

Циф­ро­вые подпи­си

LXF137 53 1.jpg В Seahorse есть гра­фи­че­ский ин­тер­фейс для управ­ле­ния все­ми клю­ча­ми.

Алекс подпи­сы­ва­ет свое со­об­щение, соз­да­вая его сверт­ку (хэш) и шиф­руя ее сво­им за­кры­тым клю­чом. По­сле прие­ма Бет мо­жет рас­шиф­ро­вать сверт­ку (с по­мо­щью от­кры­то­го клю­ча Алек­са), вы­чис­лить соб­ствен­ную сверт­ку со­об­щения и сравнить эти сверт­ки. Ес­ли они сов­па­да­ют, Бет мо­жет быть аб­со­лют­но уве­ре­на, что сооб­щение при­шло от Алек­са и оно не из­ме­ня­лось с мо­мен­та подпи­си. Заметьте, что циф­ро­вая подпись не шиф­ру­ет со­об­щения. Конеч­но, gpg скры­ва­ет эту слож­ность за про­сто­той команд­ной стро­ки. Алекс мо­жет и за­шиф­ро­вать, и подпи­сать со­об­щение:

$ gpg --encrypt --sign --armor --recipient Beth poetry.txt

Ко­гда Бет бу­дет рас­шиф­ро­вы­вать его, под­пись бу­дет про­ве­ре­на ав­то­ма­ти­че­ски. Со сто­ро­ны Бет диа­лог бу­дет вы­гля­деть так:

$ gpg --decrypt -o poetry.txt poetry.txt.asc
You need a passphrase to unlock the secret key for
user: “Beth Example (Demo User B) <beth@example.com>”
2048-bit ELG key, ID 07DFB736, created 2010-08-02 (main
key ID F6CA4978)
gpg: encrypted with 2048-bit ELG key, ID 07DFB736,
created 2010-08-02
“Beth Example (Demo User B) <beth@example.com>”
gpg: Signature made Mon 02 Aug 2010 03:25:00 BST using
DSA key ID B4DF979C
gpg: Good signature from “Alex Example (Demo User A)
<alex@example.com>”

Здесь gpg со­об­ща­ет, чьим от­кры­тым клю­чом бы­ло за­шиф­ро­ва­но со­об­ще­ние, чьим за­кры­тым клю­чом оно бы­ло под­пи­са­но, и то, что под­пись со­от­вет­ст­ву­ет со­об­ще­нию.

Управ­ле­ние от­кры­тым клю­чом

Про­вер­ка от­кры­тых клю­чей – са­мая слож­ная часть PGP. Про­бле­ма на са­мом де­ле не в пе­ре­да­че клю­ча – его мож­но лег­ко от­пра­вить друзь­ям по элек­трон­ной поч­те, вы­ло­жить на сайт или за­гру­зить на сер­вер клю­чей, та­кой как http://pgp.mit.edu. Про­бле­ма в гарантии, что от­кры­тые клю­чи дей­стви­тель­но при­над­ле­жат то­му, ко­му долж­ны при­над­ле­жать. На­при­мер, по­искав «Оса­ма Бин Ла­ден» на pgp.mit.edu, вы по­лу­чи­те несколь­ко клю­чей со­мнитель­ной под­лин­но­сти.

У про­то­ко­ла SSL (слой за­щи­щен­ных со­ке­тов – вы поль­зуе­тесь им, когда под­клю­чае­тесь к за­щи­щен­но­му сай­ту ин­тернет-ма­га­зи­на) есть по­хо­жая про­бле­ма: как уз­нать, что пуб­лич­ный ключ, ко­то­рый вы по­лу­чае­те от его вла­дель­ца, и вправ­ду при­над­ле­жит ему? Для ре­шения этой про­бле­мы ис­поль­зу­ет­ся фор­маль­ная ие­рар­хи­че­ская ин­фра­струк­ту­ра от­кры­тых клю­чей (PKI) с до­ве­рен­ны­ми цен­тра­ми сер­ти­фи­ка­ции, ко­то­рым пла­тят за подпись сер­ти­фи­ка­тов. Исто­ри­че­ски в PGP ис­поль­зо­вал­ся менее фор­маль­ный под­ход, осно­ван­ный на се­ти до­ве­рия. Алекс го­во­рит, что до­ве­ря­ет сво­ей ко­пии от­кры­то­го клю­ча Бет, подпи­сы­вая его (сво­им за­кры­тым клю­чом). У ка­ж­до­го поль­зо­ва­те­ля есть на­бор подпи­сан­ных от­кры­тых клю­чей и файл, ко­то­рый на­зы­ва­ет­ся коль­цом или связ­кой клю­чей.

Пусть Алекс уве­рен, что у него на­стоя­щие ко­пии клю­чей Бет и Чар­ли, и он до­ве­ря­ет им подпи­сать клю­чи дру­гих. За­тем, ес­ли у него по­яв­ля­ет­ся ключ, ко­то­рый дол­жен быть от Дэ­ви­да, подпи­сан­ный Бет и Чар­ли, он мо­жет счи­тать, что ключ Дэ­ви­да под­лин­ный. Так об­ра­зу­ют­ся се­ти до­ве­рия. Этот про­цесс мож­но су­ще­ствен­но уско­рить на «ве­че­рин­ках по подпи­си клю­чей» [key signing party], ко­то­рые часто про­ис­хо­дят на кон­фе­рен­ци­ях или груп­по­вых встре­чах поль­зо­ва­те­лей. На од­ной из та­ких встреч Алекс по­зна­ко­мил­ся с Эл­ви­ном, Фре­дом, Гор­до­ном и Гер­мио­ной. Он по­го­во­рил с ка­ж­дым из них, про­ве­рил их лич­ность – на­вер­ное, спро­сил пас­порт или про­сто по­смот­рел, как они вы­гля­дят – и запи­сал «от­пе­чат­ки паль­цев» их клю­чей. («От­пе­ча­ток паль­ца» – дайджест клю­ча, доста­точ­но ко­рот­кий для сравнения вруч­ную, и доста­точ­но длин­ный, что­бы на­деж­но пред­став­лять ключ.) До­ма Алекс за­гру­жа­ет от­кры­тые клю­чи сво­их но­вых зна­ко­мых, из раз­лич­ных источников. Он им­пор­ти­ру­ет клю­чи в свою связ­ку от­кры­тых клю­чей и сно­ва сравнива­ет их «от­пе­чат­ки паль­цев» с те­ми, что он запи­сал. Так как они сов­па­да­ют, он мо­жет спо­кой­но под­пи­сать клю­чи. Су­ще­ст­ву­ет да­же про­то­кол для уп­ро­ще­ния про­цес­са мас­со­вой про­вер­ки «от­пе­чат­ков паль­цев» (про­то­кол Цим­мер­ма­на–Сас­са­ма­на [Zimmermann–Sassaman]).

$ gpg --fingerprint Fred
pub 2048D/F6CA4978 2010-08-02 [expires: 2010-08-30]
Key fingerprint = D8FE 3466 B0E3 F737 6BBA D711
091E 0365 F6CA 4978
uid
Fred Flintsone (Quarry Manager) <fred@bedrock.com>
sub 2048g/07DFB736 2010-08-02 [expires: 2010-08-30]

Те­перь де­ло за ва­ми – сча­ст­ли­во­го шиф­ро­ва­ния!

Как ра­бо­та­ет PGP

LXF137 53 2.jpg PGP ис­поль­зу­ет со­че­та­ние сим­мет­рич­ных (IDEA) и асим­мет­рич­ных (Эль Га­ма­ля) шиф­ров.

Лю­бо­пыт­но, как все это ра­бо­та­ет вме­сте? В PGP ис­поль­зу­ет­ся со­че­та­ние сим­мет­рич­ных и асимметричных шиф­ров. Соз­да­ет­ся слу­чай­ный ключ сес­сии (толь­ко для дан­но­го со­об­ще­ния), за­тем он шиф­ру­ет­ся от­кры­тым клю­чом по­лу­ча­те­ля. Ре­зуль­тат от­прав­ля­ет­ся как часть со­об­ще­ния.

За­тем клю­чом сес­сии шиф­ру­ет­ся от­кры­тый текст от­пра­ви­те­ля, сим­мет­рич­ным шиф­ром (по умол­ча­нию IDEA), и ре­зуль­тат при­сое­ди­ня­ет­ся к со­об­ще­нию. По­лу­ча­тель рас­шиф­ро­вы­ва­ет ключ сес­сии сво­им за­кры­тым клю­чом, а за­тем ис­поль­зу­ет по­лу­чен­ный от­кры­тый ключ для рас­шиф­ров­ки ос­нов­но­го со­об­ще­ния.

У это­го под­хо­да есть ряд пре­иму­ществ: во-пер­вых, сим­мет­рич­ные шиф­ры ра­бо­та­ют го­раз­до бы­ст­рее, и им не нуж­на та­кая дли­на клю­ча. Во-вто­рых, ес­ли пе­ре­хват­чик взло­ма­ет ключ сес­сии, это не по­мо­жет ему про­чи­тать все по­сле­дую­щие со­об­ще­ния. На­ко­нец, так как асим­мет­рич­ный шифр ис­поль­зу­ет­ся толь­ко для шиф­ро­ва­ния ко­рот­ко­го (и слу­чай­но­го) зна­че­ния, шан­сов на то, что он бу­дет взло­ман крип­тоа­на­ли­ти­ком, не ос­та­ет­ся поч­ти ни­ка­ких.

На­сколь­ко хо­рош PGP?

Су­дя по от­кры­тым све­де­ни­ям, на дан­ный мо­мент ис­поль­зуе­мые в PGP шиф­ры прак­ти­че­ски не­воз­мож­но взло­мать за лю­бое ре­аль­ное вре­мя и с вы­чис­ли­тель­ны­ми ре­сур­са­ми лю­бой мощ­но­сти. Все­гда воз­мо­жен ва­ри­ант, при ко­то­ром ка­кой-ни­будь ге­ний в Управ­ле­нии на­цио­наль­ной безо­пас­но­сти США или Цен­тре пра­ви­тель­ст­вен­ной свя­зи Ве­ли­ко­бри­та­нии на­йдет уяз­ви­мость и за­ста­вит пра­ви­тель­ст­во по­стро­ить ком­пь­ю­тер стои­мо­стью в мил­ли­он дол­ла­ров, что­бы вос­поль­зо­вать­ся ею. Это был бы уже не пер­вый раз, ко­гда пра­ви­тель­ст­во ус­пешно взло­ма­ло шифр, но по­мал­ки­ва­ло об этом, что­бы по­ток под­даю­щих­ся де­шиф­ров­ке со­об­ще­ний про­дол­жал­ся. И «до­воль­но хо­ро­ший» (pretty good) на са­мом де­ле оз­на­ча­ет «поч­ти на­вер­ня­ка за пре­де­ла­ми воз­мож­но­стей лю­бо­го вра­га, ко­то­ро­го на­до удер­жи­вать от взло­ма сис­те­мы, по­ка важ­на безо­пас­ность».

Персональные инструменты
купить
подписаться
Яндекс.Метрика