Цифрово подписани документи
Цифрово подписаните документи представляват електронно съдържание (във вид на прост текст или обособено като отделни файлове), придружено от цифров подпис (сложна криптографска производна, позволяваща да се установи по технически гарантиран начин автентичността и интегритета на подписаното електронно съдържание).
За автентичност говорим тогава, когато съдържанието изхожда наистина този, който е посочен като негов автор.
За интегритет говорим тогава, когато съдържанието не е променяно след неговото утвърждаване (подписване).
Цифровите подписи представляват сложна криптографска производна (отново във вид на прост текст или обособена като отделен файл), която е функция от символите в подписаното съдържание 'частния' ключ на този, който полага цифровия подпис. Един цифров подпис (във вид на прост текст), в повечето случаи има подобен вид:
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.14 (GNU/Linux)
iQEcBAEBAgAGBQJeg3nSAAoJEIaoZfk6Rpq6z0AH/2oUdC4c3Zc90lOMHfTQfWkR
i35wYlWP+wS/u0FgMJXAJxyIjgOJGs4h1i25MhPiBaRexEGQG9P/PolYD6LiKFwM
UjglfB/4ZiKWk3w3/fkE5ejT2udo3rkRAwL9+0f9Embm4d7nqZxaMDdg03PgOqWA
2i3xwG8BjwWqjIdlBcQpe4LgQpHYvkcp6Nu5HJhpcJeypPCU2r/k5I7v/mr2lCfi
j7u0FiF0I9IDimlG1mA/K0td9Ia7+c2MDmAM4LXyC/WvbCa/Ir/NwkBBRh55PC6y
bWCTGqTcz1Vt4BhFgWrK8rNldylmPsaJIQNp9/hMJRiWRZFl6XLE9W7zvsVvUcd=
=kXdG
-----END PGP SIGNATURE-----
(където първият и последният ред обозначават началото и края на цифровия подпис; следва обозначение за софтуерната стандартизация, съгласно която е положен подписът (в случая – версия 2.0.14 на свободния (GNU/Linux базиран) софтуер за цифрово шифроване и подписване GnuPG); самият цифров подпис (представляващ криптографска производна между символите в подписаното електронно съдържание и символите в 'частния' ключ; и накрая – проверовъчна сума за интегритета на цифровия подпис).
Цифров подпис може да бъде положен динствено с 'частнен' ключ. Поради тази причина 'частният' ключ се пази в дълбока тайна от своя притежател (това гарантира, че никой друг не може да се подпише от негово име). С 'публичния' ключ не може да се подписва, но може да се проверява дали определен цифров подпис е положен наистина чрез 'частния' ключ, съответващ еднозначно на въпросния 'публичен' ключ (автентичност); и дали след подписването проверяваното електронно съдържание продължава да бъде такова, каквото е било към момента на подписването му (интегритет). За да може да се осъществи такава проверка, е необходим подписаният електронен документ, положеният върху този документ цифров подпис и 'публичният' ключ, съответстващ еднозначно на съответния 'частен' ключ, с който е извършено подписването.
В едни случаи цифровият подпис е изнесен в отделен файл, а в други случаи е вграден направо в подписаните електронни документи. Нашата система за електронно гласуване генерира електронни документи във вид на прост текст, в които (пак във вид на прост текст) е вграден цифровият подпис, с който са подписани. Такъв електронен документ в повечето случаи има подобен вид:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
{
"voting_structure_name": "Test-vote",
"voting_structure_hash": "1d8de75l4ekje49d0520f699548efcad326c495278poweir4j340929ead74392",
"voter_name": "Иван Иванов",
"voter_mail": "your_name@example.com",
"voter_weight": 1,
"vote": {
"f1": "v1",
"f2": "v1",
"f3v2": "on"
},
"vote_received_time": "2019-12-31T23:59:59Z"
}
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.14 (GNU/Linux)
iQEcBAEBAgAGBQJeg3nSAAoJEIaoZfk6Rpq6z0AH/2oUdC4c3Zc90lOMHfTQfWkR
i35wYlWP+wS/u0FgMJXAJxyIjgOJGs4h1i25MhPiBaRexEGQG9P/PolYD6LiKFwM
UjglfB/4ZiKWk3w3/fkE5ejT2udo3rkRAwL9+0f9Embm4d7nqZxaMDdg03PgOqWA
2i3xwG8BjwWqjIdlBcQpe4LgQpHYvkcp6Nu5HJhpcJeypPCU2r/k5I7v/mr2lCfi
j7u0FiF0I9IDimlG1mA/K0td9Ia7+c2MDmAM4LXyC/WvbCa/Ir/NwkBBRh55PC6y
bWCTGqTcz1Vt4BhFgWrK8rNldylmPsaJIQNp9/hMJRiWRZFl6XLE9W7zvsVvUcd=
=kXdG
-----END PGP SIGNATURE-----
(където първият ред обозначава началото на електронния документ; следва обозначение за хеширащата стандартизация, съгласно която е генерирана проверовъчната сума на процедурата за гласуване (в случая – SHA1); самата проверовъчна сума на процедурата; имената и синдикалния e-mail на гласуващия; тежест на гласа (ако например има право на повече от 1 глас); начин на гласуването по поставените въпроси; дата и час на подаването на гласа; и цифровия подпис, положен върху документа).
Криптографска проверка за автентичността и интегритета на подобен електронен документ може да се направи съвсем лесно в коя да е Свободна операционна система, поне по два начина.
Първият начин е да въведеш в Терминала (в текстовия интерпретатор) на системата команда
gpg
(указание за стартиране на Свободния софтуер за цифрово шифроване и подписване GnuPG), след което копираш документа във вид на прост текст (без да променяш дори само един символ в него) и го поставиш в терминала, като накрая натискаш [Ctrl]+[D].Вторият начин е да създадеш прост текстови файл (например 'Файл.txt') със съдържание само и единствено документа (без никакво форматиране, във вид на прост текст) и да въведеш команда в терминала
gpg --verify /адрес/директория/Файл.txt
(ако терминалът е отворен в директорията с проверявания файл, е достатъчно само наименованието на файла).
И в двата случая системата ще изведе (ако в нея е въведен необходимият за проверката 'публичен' ключ) положителен (Good signature
) или отрицателен (Bad signature
) криптографски отговор. В първия случай имаш технически гарантирано уверение, че авторът на цифровия подпис е разполагал с 'частния' ключ, иманентно свързан с използвания за проверката 'публичен' ключ; и, че впоследствие електронният документ не е променян по никакъв начин. Във втория случай поне едно от тези две условия не е вярно.