драўляны зэдлік   С.Б.Е.Ў.К.: чытай, што пішуць
 


Артыкулы
 
level up!

PGP ад Ё да Ы    // 2004-01-30

Ахтунг! Ня гледзячы на тое, што гэты артыкул стаў дыступны толькі зараз, апошнія зьмены былі зробленыя ў студзені 2004 (мяркуючы па датах у атрыбутах файлаў), а таму зьвесткі адносна вэрсіяў праграмаў могуць быць састарэлымі.

Частка 1, тэарытычная

RSA-крыптасыстэма, названая пачатковымі літарамі прозьвішчаў ейных стваральнікаў, зьяўляеца асымэтрычнай сыстэмай шыфраваньня. Гэта значыць, што для шыфраваньня й дэшыфраваньня выкарыстоўваюцца розныя ключы. Закрытым можна толькі расшыфраваць, а адкрытым — толькі зашыфраваць паведамленьне.

Як гэта усё працуе?

Уладальнік крыптасыстэмы генэруе два вялікія простыя лікі. Які лік лічыць вялікім — іншая праблема. Але, напрыклад, у ЗША вялікі лік — ад тысячы знакаў. І крыптасыстэму вытворчасьці ЗША мы й будзем выкарыстоўваць.

Пасьля генэрацыі гэтыя два лікі памнажаюцца адзін на аднаго. Атрымліваецца новы лік, што завецца модулем. Лікі тыя — сакрэтныя, а модуль — не. Справа ў тым, што на сёньняшні дзень не існуе альгарытма, акрамя проста як паспрабаваць усе лікі, раскласьці вялікі лік на простыя дзельнікі. Фішка ў тым, што здабытак двух вялікіх простых лікаў выглядае прыблізна як яшчэ большы просты лік, раскласьці на дзельнікі які за палінаміяльны час немагчыма. Раскласьці лік на дзельнікі — г.зн. фактарызаванць яго. Маем M = p*q, дзе p, q — згенэраваныя простыя лікі, М — іхны здабытак. Зразумела, што ведаючы p, q можна падлічыць, колькі будзе f(M) = (p-1)*(q-1), а ведаючы толькі М зрабіць гэта будзе надзвычай цяжка.

М лічыцца несакрэтным лікам, p, q — сакрэтныя лікі.

Далей выбіраецца выпадковым чынам закрыты ключ d. Адкрыты ключ с выбіраецца так, каб (c*d) (mod f(M)) = 1, дзе mod — апэратар, аналягічны аднайменнаму ў Паскалі.

Паведамленьнем лічыцца лік а, такі, што 0 < a < M. Калі a > M, ён дзеліцца на часткі.

Шыфраваньне адбываецца так:

a -> ac (mod M).

Тое, што атрымалася — ac (mod M) — шыфраванае паведамленьне.

Дэшыфраваць можна такім чынам:

(ac)d (mod M) = a1+k*f(M) (mod M) = a*(af(M))k (mod M).

af(M) па тэарэме Айлера роўна 1, таму a*(af(M))k (mod M) = a (mod M) = a (бо 0 > a > M)

Таксама існуе вялікая колькасаць акалічнасьцяў, але табе, напэўна, яны нецікавыя. Таму я раскажу толькі пра 2, на мой погляд самыя значныя:

• чым большыя простыя лікі, тым больш часу трэба, каб іх знайсьці;

• існуе альгарытм, які дазваляе ведаючы закрыты й адкрыты ключы фактарызаваць модуль. Таму закрыты ключ трэба берагчы й нікому не даваць.

Электронна-лічбавы подпіс на аснове RSA

ЭЛП дазваляе ўпэўніцца ў сапраўднасьці аўтарства таго ці іншага дакумэнта, выкарыстоўваючы адкрыты ключ. У гэтым выпадку, асоба, што стварае паведамленьні пры дапамозе свайго закрытага ключа дадае да паведамленьня a пэўны модуль s — такі, што s = ad (mod М), дзе d — закрыты ключ. Тады пара (a, s) лічыцца падпісанным паведамленьнем.

Праверыць, ці сапраўды паведамленьне было падпісана пэўнай асобай, можна пры дапамозе загадзя распаўсюджанага адкрытага ключа з той самай пары, дзе знаходзіцца закрыты ключ, з выкарыстаньнем якога і быў згенэраваны подпіс. Адбываецца гэта наступным чынам (c — адкрыты ключ): sc (mod M) мусібыць роўным ac*d (mod M), а гэта, у сваю чаргу, роўнае a (mod M).

Таму, калі sc (mod M) = a (mod M), аўтар сапраўдны й паведамленьне не зьмянялася, інакш — або падроблены аўтар, або тэкст паведамленьня.


Частка 2, практычная

Для ажыцьцяўленьня шыфраваньня будзем выкарыстоўваць PGP 8.0.2 freeware і The Bat! 2.0.
PGP можна ўзяць на www.pgpi.com ў разьдзеле бясплатных праграмаў (бяз сорцаў амаль што 9М, з сорцамі, адпаведна, больш). Будзем выкарыстоўваць бясплатную вэрсію, таму што:

1) ейнае выкарыстаньне цалкам легальнае

2) камэрцыйнай вэрсіі я нідзе не знайшоў у вольным доступе

The Bat 2.0 ёсьць на www.ritlabs.com (2-3M). Менавіта ў гэтай вэрсіі зьявілася ўбудаваная падтрымка PGP 8.

Ставімся

Бат цяжкасьцяў не выклікае.

PGP. Усталёўшчык папрасіў упэўніцца, што Кліент для сетак Мікрасофт усталяваны. Ага, фак ім. Добраахвотнага расшарваньня ўласных дыскаў я яшчэ нідзе ня бачыў. Цісьнем ОК... І аблом. Што ж... Яшчэ раз. Фак, тое самае.

Ідзем ва ўласьцівасьці любога злучэньня зь Сецівам. Я выбраў тое, якое выкарыстоўваю. Properties -> Networking -> Install -> Client -> Client for Microsoft Networks -> OK. Да лякальнай сеткі я не падлучаны, таму зьняў птушку насупраць яго, каб розныя там хакеры не ўтыкалі свой нос туды, куды яго ўтыкаць ня трэба.

Закрывай усе вокны запускай усталёўку PGP. У мяне ўсё ок.

Next -> Yes -> Next -> No I'm a new User -> Next -> [Browse ->] Next.
Далей я адзначыў усё. У мяне папрасілі 13 з гакам Мб. Нармальна. Next -> Next. Спыталіся пра тэчку Эўдоры. Мусіць, ня варта было яе ў кампанэнтах адзначаць. Будзеш ставіць — здымі, калі ў цябе яе таксама няма. Папрасілі перазагрузіцца. Перазагружаймася.

Так, што мы маем. Замок ў трэі, PGP-дыск не працуе...

Як бы гэтая бясплатная вэрсія і ласты праз 30 дзён ня склеіла... Паглядзім.

Заўвага. Нічога ня склеілася, усё працуе і па сёньняшні дзень.

Ключыкі.

Ёсьць 2 варыянты.

Першы. Выкарыстоўваць стандартны мэнэджр ключоў і шыфраваць-дэшыфраваць паведамленьні copy-paste'ам. Мы пойдзем іншым шляхам!

Другі. У Бат, пачынаючы з 2.0, убудаваная падтрымка PGP 8. Вось яе і заюзаем.

У Баце. Tools -> OpenPGP -> Choose OpenPGP version -> PGP 5,6,7,8 (built-in support) -> OK.

Далей.

Tools -> OpenPGP -> OpenPGP Preferences.

Наладкі. Тут можна выдаліць іконку з трэю (я б гэта рабіць ня раіў, адныя недахопы; тым больш, што праз пэўны час яна сама схаваецца; ў цябе ж XP?), зьняць птушку Faster Key Generation, бо, як я падумаў, не сказаўся б гэты адзначаны радок на надзейнасьці таго, што генэруецца.

Памяняй месцазнаходжаньне ключоў. Які вірус ці што — тэчка Твае Дакумэнты накрыецца другой (пасьля :/Windows/, зразумела).

Хаця тут назіраліся ў мяне нейкія глюкі з закрытым ключом. Праблема вырашылася проста упісаньнем патрэбнага шляху ў радок. Астатняе я пакінуў як было.

Стварэньне пары ўласных ключоў

Tools -> OpenPGP -> Key Manager...

Keys -> New Key -> Expert

Full Name: Тваё імя, мянушка, пад якой цябе будуць бачыць абанэнты.

Email-address: Email-адрас, для якога ствараецца ключ.

Key-Type: Deffie-Hellman/DSS

KeySize: 4096 — чаго там... Чым больш, тым лепш :)

Key expiration: Час, калі згенэраваны ключ зробіцца нядзейным. Увогуле пажадана час ад часу мяняць ключы. Гэта нясе з сабою адсутнасьць залежнасьці існай пары ключоў ад паведамленьняў, якія былі зашыфраваныя папярэднімі ключамі, што падвышае надзейнасьць сыстэмы, але ў той жа час новы ключ касуе магчымасьць чытаць старыя паведамленьні. Таму тут вырашаць табе. Можаш, напрыклад, мяняць сваю пару кожныя 4 месяцы. Але тады кожны, хто мае твой закрыты ключ мусіць усталёўваць новы таксама кожныя 4 месяцы. А можаш паставіць і never. Хаця ў гэтым выпадку я б ня раіў ствараць сабе кароткі ключ.

Next. Passphrase. Справа ў тым, што закрыты ключ дастаткова вялікі для таго, каб яго было магчыма запомніць. Нават калі гэта ўсё-ткі адбудзецца, праблематычна кожны раз яго уводзіць з-за яго даўжыні. Таму гэты ключ захоўваецца на дыску карыстальніка ў зашыфраваным стане, а гэты пароль выкарыстоўваецца для яго расшыфроўкі. PGP-сыстэма расшыфроўвае закрыты ключ і ўтрымлівае яго ў памяці для далейшага выкарыстаньня.

Пароль табе прыйдзецца ўводзіць досыць часта, таму варта выбраць просты, але адначасова не відавочны сказ. Ну і так, каб прагрэсбар цалкам запоўніўся. Нэкст. Як згенэруюцца ключы, нэкст -> Фініш.

Схема простая: адкрытым ключом юзэры шыфруюць сваё паведамленьне табе, а расшыфраваць яго можна толькі закрытым ключом, які маеш толькі ты (вядома, калі ты нікому яго не паказваў і ніхто не пазычаў яго ў цябе).

Распаўсюджваньне адкрытага ключа

Клікаеш правай кнопкай па самым тлустым запісе -> Export...

У файл, які пазначыш, будзе захаваны адкрыты ключ. Пасьля гэты файл можна адкрыць нататнікам ці проста паслаць па пошце сваім абанэнтам.

Усталяваньне адкрытага ключа, дасланага кімсьці

Keys -> Import...

Вылучаеш файл з ключом -> OK -> Import/Cancel (Cancel — каб адмовіцца ад імпартаваньня)

Або, калі ключ быў прысланы адразу ў лісьце, што нашмат больш верагодна, то проста ў Баце вылучаеш ліст з ключом, пасьля Tools -> Message Security -> Import Key/Certificate.

Шыфраваньне паведамленьня

Выкарыстоўваецца паведамленьне і адкрыты ключ таго, каму паведамленьне пасылаецца. У Баце Ctrl+Shift+E -> зашыфраваць. Тут пачаліся праблемы. Здавалася б — усё ок, толькі нешта не працуе й замок у трэі расшпілены. Пасьля разнастайных спробаў выявіць прычыну, аказалася, што трэба згенэраваць яшчэ адну пару ключоў. Ад балды, якога памеру, зь якім імем, адрасам і фразай. Проста калі шыфравацца ім нічога ня будзе, можна ўводзіць дадзеныя ад балды. І ўсё пайшло як мае паўботы па сьлізкай лесьвіцы.

Заўвага. Такое было толькі адзін раз — калі пісалася ўся гэтая бадзяга. Так што цалкам імаверна, што ў цябе ўсё будзе працаваць адразу. А расшпілены замок у трэі азначае толькі тое, што passphrase ужо ўводзіўся ў гэтым сэансе і закрыты ключ у незашыфраваным стане знаходзіцца ў кэшы крыптасыстэмы.

Дэшыфраваньне паведамленьня

Няхай нехта зашыфраваў паведамленьне тваім адкрытым ключом і яно прыйшло ў скрыню, для якой той ключ ствараўся. Вылучаеш паведамленьне, Сtrl+Shift+D. Усё працуе! Заўваж, зьяўляецца часовая закладка (а не новае паведамленьне, як у The Bat! v1.6х), якая зьнікае пасьля зьняцьця вылучэньне зь ліста. То бок яго нельга будзе прачытаць нават калі маеш доступ да тэчкі Бата. Адзінае выйсьце — займець закрыты ключ, так што беражы яго.

Калі ты напісаў(ла) некаму ліст, та пасьля шыфраваньня можна заўважыць, што ты ўсё роўна можаш расшыфраваць паведамленьне. Гэта не зусім стасуецца з тэорыяй, зашыфраванае паведамленьне можна расшыфраваць толькі закрытым ключом з пары, да якой належыць выкарыстаны адкрыты ключ. Тут я магу толькі здагадвацца, бо я ня ведаю сапраўднага альгарытму работы TheBat!. Найбольш верагодным варыянтам мне здаецца наступны. Калі ты шыфруеш паведамленьне, напісанае камусьці, ягоным(ейным) паблік-ключом, Бат шыфруе яго ў двух асобніках, т.б. шыфруе арыгінальнае паведамленьне спачатку адкрытым ключом карыстальніка, які напісаў паведамленьне (т.б. цябе), а пасьля зноў шыфруе арыгінальнае паведамленьне толькі на гэты раз не тваім паблік-ключом, а паблік-ключом твайго адрасату. І тое, што атрымалася — два шыфраваных паведамленьня — аб'яднанае разам лічыцца шыфраваным паведамленьнем. Расшыфраваць зараз яго можна любым з двух ключоў: закрытым ключом абанэнта або тваім закрытым ключом. Адсюль вынікае, што калі твой закрыты ключ вядомы пабочным асобам, закрыты ключ твайго адрасату вядомы толькі яму, а ты паслаў яму ліст, зашыфраваны ягоным адкрытым ключом, то яго ўсё роўна тыя пабочныя асобы змогуць бязь цяжкасьцяў яго расшыфраваць і пачытаць. Сьцеражыся.

Таксама варта помніць аб тым, што другі адкрыты ключ (твой адкрыты ключ, а не твайго адрасату) для шыфраваньня паведамленьня будзе выкарыстаны з пары ключоў, якая пазначаная як пара па змоўчаньні, незалежна ад таго, зь якога адрасу ты адпраўляеш ліст.

Электронна-лічбавы подпіс

Электронна-лічбавы подпіс — набор сымбаляў, які дадаецца да шыфраванага або нешыфраванага паведамленьня, і які пацьвярджае аўтарства паведамленьня. Той набор лічбаў-літараў можа быць згенэраваны толькі пры наяўнасьці закрытага ключа. А што ж будзе, калі я зраблю сабе пару з тваім імем і падпішу паведамленьне? — спытаеш ты. А тое, што праверка адбываецца з выкарыстаньнем адкрытага ключа падпісанта. І таму пры спробе завэрыфаяць чыесь фэйкавы ліст стане зразумелым, што гэта падробка. Тому, хто ня ведае закрытага ключа, трэба ня толькі зьмяніць подпіс, але й прыдумаць такі зьмест, які б яшчэ й адпавядаў ягоным патрэбам. Во як.

ХаўТу не прыводжу, бо там усё проста: Privacy -> OpenPGP -> Sign Entire Text,
Privacy -> OpenPGP -> Sign & Encrypt Entire Text —
каб падпісаць або падпісаць і зашыфраваць тэкст,
Tools -> Message Security -> Verify Signature —
каб праверыць, ці зьяўляецца аўтарам паведамленьня той, ад каго яно прыйшло.

Ну й, зразумела, каб што-небудзь правяраць, трэба мець адкрыты ключ таго чалавека.


Канец

Вось як. Бачыш, усё проста, як SSL-пратакол. І пасьля таго, як ўсё напісанае зьверху зробіцца зразумелым, зьявіцца адчуваньне ўласнай прыналежнасьці да групы людзей, што маюць права на прыватныя паведамленьні. Усё. Ўсем спасіба, ўсе свабодны.


mysql_connect() [function.mysql-connect]: Access denied for user 'zedlik_dbuserx1'@'localhost' (using password: YES)
Памылка падчас выкананьня.
Паспрабуй пазьней, альбо зьвяжыся з аўтарам, калі табе сюды насамрэч трэба.

Памылка падлучэньня да сэрвэра базы дадзеных

 
 
 

навіны сайту
14.03.2015
VMS 2.9.2: адпраўка на velcom і life, падтрымка перанесеных нумароў
07.05.2012
VMS 2.9.1: выпраўленая адпраўка на velcom і life
27.04.2010
VMS 2.9: дададзены life і выпраўлены velcom
02.03.2009
Падтрымка Windows Vista для Belarusian (Latin) (Custom) Keyboard Layout
усе навіны
 
стужкі навінаў
RSS
Atom
 
вялікі брат
 
не па тэме
zedlik. Пэрсанальны блог