Кваліфікований Електронний Підпис
Кваліфікований Електронний Підпис, або Кваліфіклована Електронна Печатка ---
це набір стандартів криптографічного захисту ДСТУ 4145,
та міжнародних стандартів які визначають його конверт: X.501, X.509, X.511, X.520.
Серія міжнародних стандартів X.500, групується по категоріям, кожна
з яких має свій перелік ASN.1 файлів. Аби підключити усі визначення необхідні
для КЕП використані наступі компоненти стандартів (виділені болдом):
X.501 ---
BasicAccessControl ,
InformationFramework ,
UsefulDefinitions ;
X.509 ---
SpkmGssTokens ,
PkiPmiExternalDataTypes ,
AttributeCertificateDefinitions ,
AlgorithmObjectIdentifiers ,
AuthenticationFramework ,
CertificateExtensions ;
X.511 ---
SpkmGssTokens ,
DirectoryAbstractService ,
X.520 ---
PasswordPolicy ,
UpperBounds ,
SelectedAttributeTypes .
Можно було би винести необхідні визначення одразу в KEP.asn1 , однак
цим хотілося підкреслити сумісність з міжнародними стандартами. Окрім серії
протоколів X.500, КЕП ще визначає також запити та відповіді OCSP, також у ASN.1 форматі.
На відміну від самого алгоритму КЕП, який визначено ДСТУ 4145,
конверти визначаються не стандартами, а наказами міністерства юстиції:
Проект наказу Адміністрації Держспецзв'язку та Держкомінфоматизації (2009) ,
Наказ Міністерства юстиції України 1236/5/453 .
Керуючись цими нормативними документами було створено файл KEP.asn1 ,
який є одним з трьох top-level файлів необхідниї для компіляції ASN.1 компілятором.
Існує небагато безкоштовних та повних компіляторів (генераторів парсерів)
ASN.1 специфікацій. Erlang є прикладом системи, до складу якої входить
першокласний безкоштовний з відкритою ліценцією ASN.1 компілятор, де
файли в ASN.1 нотації можуть бути зкомпільовані безпосередньо Erlang компілятором:
$ erlc AuthenticationFramework.asn1
$ erlc InformationFramework.asn1
$ erlc KEP.asn1
Створити файл підпису PKCS-7 можна за допомогою будь якої програми сертифікованої в Україні.
Найпростіше отримати свою КЕП печатку будучи клієнтом ПриватБанку. За допомогою
"Користувача ЦСК" компанії ІІТ ви можете підписувати файли використовуючи безкоштовну
форму приватного ключа у вигляді звичайного файлу.
Щоб показати як користуватися КЕП, та прочитати атрибутивну інформацію з сертифікату,
який вшитий в PCKS-7 повідомлення з криптографічним підписом, покажемо 5 функцій:
def parseContentInfoSMIME(file) do {:ok, smime} = :file.read_file(file) ; [_,base] = :string.split(smime, "\n\n") ; parseContentInfoBin(:base64.decode(base)) end
def parseContentInfoB64(file) do {:ok, bin} = :file.read_file file ; parseContentInfoBin(:base64.decode(bin)) end
def parseContentInfoFile(file) do {:ok, bin} = :file.read_file file ; parseContentInfoBin(bin) end
def parseContentInfoBinUA(bin) do {:ok, contentInfo} = :KEP.decode(:ContentInfo, bin) ; parseContentInfo(contentInfo, true) end
def parseContentInfoBinX509(bin) do {:ok, contentInfo} = :'CryptographicMessageSyntax-2010'.decode(:ContentInfo, bin) ; parseContentInfo(contentInfo, false) end
У результаті отримуємо наступний високорівневий інтерфейс:
> CA.CMS.parseContentInfoFile "test/CAdES/CAdES-BES-DSTU-4145.p7s"
[
resourceType: :SignedData,
version: :v1,
cert: [
[
resourceType: :Certificate,
version: :v3,
signatureAlgorithm: :"dstu4145WithGost34311-pb",
subject: [
cn: "ТЕСТ Тестовий Тест Тестович",
sn: "Тестовий",
givenName: "Тест Тестович",
serialNumber: "1058",
c: "UA",
l: "Київ"
],
issuer: [
o: "ДП \"ДІЯ\" (ТЕСТ)",
cn: "Адміністратор ІТС ЦЗО (CA TEST)",
serialNumber: "UA-43395033-2101",
c: "UA",
l: "Київ",
organizationIdentifier: "NTRUA-43395033"
],
serial: "AhQ2MEOAPpo0HAQAAAAiBAAA+XgAAA==",
validity: [from: '240303220000Z', to: '260303215959Z'],
publicKey: [
key: <<4, 33, 91, 177, 14, 11, 252, 136, 216, 23, 38, 65, 187, 197, 216,
35, 74, 43, 11, 64, 60, 163, 34, 100, 204, 35, 145, 239, 135, 242,
217, 222, 35, 110, 1>>,
scheme: {1, 2, 804, 2, 1, 1, 1, 1, 3, 1, 1},
field: {:DSTU4145Params,
{:ecbinary,
{:ECBinary, 0, {:BinaryField, 257, {:t, 12}}, 0,
<<16, 190, 227, 219, 106, 234, 158, 31, 134, 87, 140, 69, 193, 37,
148, 255, 148, 35, 148, 167, 215, 56, 249, 24, 126, 101, ...>>,
57896044618658097711785492504343953926772365604796032451169741553099060627213,
<<182, 15, 210, 216, 220, 232, 169, 52, 35, 198, 16, 27, 202, 145,
196, 122, 0, 126, 108, 48, 11, 38, 205, 85, ...>>}},
<<169, 214, 235, 69, 241, 60, 112, 130, 128, 196, 150, 123, 35, 31, 94,
173, 246, 88, 235, 164, 192, 55, 41, 29, 56, 217, 107, 240, 37, 202,
78, 23, ...>>}
],
extensions: [
subjectKeyIdentifier: "igFayiwDI1Vfh0ROFRArg3OA4ZmOoAQKtTxbsxzEAOo=",
authorityKeyIdentifier: [
<<54, 48, 67, 128, 62, 154, 52, 28, 154, 151, 153, 18, 69, 97, 248,
219, 115, 140, 126, 63, 183, 189, 163, 241, 159, 230, 55, 168, 177,
195, 202, 32>>
],
keyUsage: [:digitalSignature, :nonRepudiation],
certificatePolicies: ["1.2.804.2.1.1.1.2.2", "1.3.6.1.5.5.7.2.1",
"https://ca-test.czo.gov.ua/cps"],
basicConstraints: [],
qcStatements: ["0.4.0.1862.1.1", "0.4.0.1862.1.2", "UAH", "0.15.66.64",
"0.0", "0.4.0.1862.1.5", "https://ca-test.czo.gov.ua/reglament", "en",
"1.2.804.2.1.1.1.2.1"],
subjectAltName: ["[email protected] ", "1.3.6.1.4.1.311.20.2.3", "1"],
cRLDistributionPoints: ["http://ca-test.czo.gov.ua/download/crls/TestCSK-2021-Full.crl"],
freshestCRL: ["http://ca-test.czo.gov.ua/download/crls/TestCSK-2021-Delta.crl"],
authorityInfoAccess: [
{"1.3.6.1.5.5.7.48.2",
"https://ca-test.czo.gov.ua/download/certificates/TestCA2021.p7b"},
{"1.3.6.1.5.5.7.48.1", "http://ca-test.czo.gov.ua/services/ocsp/"}
],
subjectInfoAccess: [
{"1.3.6.1.5.5.7.48.3", "http://ca-test.czo.gov.ua/services/tsp/"}
]
]
]
],
signerInfo: [
[
resourceType: :SignerInfo,
issuer: [
o: "ДП \"ДІЯ\" (ТЕСТ)",
cn: "Адміністратор ІТС ЦЗО (CA TEST)",
serialNumber: "UA-43395033-2101",
c: "UA",
l: "Київ",
organizationIdentifier: "NTRUA-43395033"
],
keyAlg: {1, 2, 804, 2, 1, 1, 1, 1, 2, 1},
signatureAlg: {1, 2, 804, 2, 1, 1, 1, 1, 3, 1, 1},
signedAttrs: [
contentType: {1, 2, 840, 113549, 1, 7, 1},
signingTime: "240304082625Z",
messageDigest: "vhSPLtug9UJy3ZGsXHecfG28cC7KmSiw96+Y0foq+Tg=",
signingCertificateV2: 309361817556530004395837158894224188190313938944,
contentTimestamp: {"1.2.840.113549.1.7.2", 4585411, "20240304082626Z",
"vhSPLtug9UJy3ZGsXHecfG28cC7KmSiw96+Y0foq+Tg="}
],
attrs: []
]
],
signedContent: "Test\r\n"
]