
рдЖрдЬ, рдбрд┐рдЬрд┐рдЯрд▓ рдкреНрд░рдорд╛рдгрдкрддреНрд░ X509 v.3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдо рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд▓реЛрдЧ рд╕реНрдЯреЗрдЯ рд╕рд░реНрд╡рд┐рд╕, рдлреЗрдбрд░рд▓ рдЯреИрдХреНрд╕ рд╕рд░реНрд╡рд┐рд╕, рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рдмрд┐рдбрд┐рдВрдЧ рдЖрджрд┐ рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд▓реЛрдЧ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ "рдЫрд╛рддреА" рдореЗрдВ рдХреНрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдкрд╛рд╕рдкреЛрд░реНрдЯ рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рд╣реИ, рддреЛ рдЗрд╕реЗ рдХреИрд╕реЗ рдкрдврд╝рд╛ / рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рдВ, рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╡реЗ рдЖрдо рдирд╛рдЧрд░рд┐рдХ рдХреЛ рдмрд╣реБрдд рдХрдо рджреЗрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП gcr- рджрд░реНрд╢рдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд▓реЗрдВ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд▓рд┐рдирдХреНрд╕ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдЙрдкрдХрд░рдг рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП
рдШрд░реЗрд▓реВ OS рдореЗрдВ рд╣реИ :

рдорд╛рдирдХ рджрд░реНрд╢рдХ
рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдкреНрд░рд╛рд░реВрдкреЛрдВ (рдкреНрд░рдорд╛рдг рдкрддреНрд░, рдЕрдиреБрд░реЛрдз, рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ / PKCS # 7, рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрдВрдЯреЗрдирд░ PKCS # 12, рдЖрджрд┐) рдореЗрдВ рдбреЗрдЯрд╛ рдпреБрдХреНрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рдирд╛ рд╣реИред рд▓реЗрдХрд┐рди, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдкрд╢реНрдЪрд┐рдореА рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЗ рджреЗрд╢ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рд╢рдкрде рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИред рдФрд░ рдпрджрд┐ рдЖрдк рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЬрдм рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдзрд╛рд░рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреА рд╣реИ, рддреЛ рдЕрд╕рдВрдЧрдд рдЕрдХреНрд╖рд░ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред рдмрд╛рдИрдВ рдУрд░ рд╕реНрд╡рдпрдВ oid рд╣реИрдВ, рдФрд░ 16 рд╡реЗрдВ рд░реВрдк рдореЗрдВ рджрд╛рдИрдВ рдУрд░, asn1- рд╕рдВрд░рдЪрдирд╛ рдЙрдирдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рдеред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдпреЗ OGRN (1.2.643.100.1), SNILS (1.2.643.100.3) рдФрд░ TIN (1.2.643.3.131.1.1) рд╣реИрдВред рдФрд░ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдирд╛рдЧрд░рд┐рдХ рдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдЙрд╕рдХрд╛ рдбреЗрдЯрд╛ рд╣реИред рдРрд╕рд╛ рдордд рд╕реЛрдЪреЛ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рд▓рд┐рдирдХреНрд╕ рдкрд░ рд╣реИ, рдпрд╣ рдХрд┐рд╕реА рднреА рдкреНрд░рдорд╛рдгрдкрддреНрд░ рджрд░реНрд╢рдХ рдХреА рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ рдЖрдк рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:

рдХреБрдЫ рдПрдХреНрд╕рдЯреЗрдВрд╢рди, рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдФрд░ рдорд╛рди рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, oid om 1.2.643.100.111 CIPF рдХрд╛ рдирд╛рдо рдЫрд┐рдкрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдХреБрдВрдЬреА рдЬреЛрдбрд╝реА рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕ рдирд┐рдЬреА рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдЕрдиреБрд░реЛрдз рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдирд┐рд╣рд┐рдд рд╣реИ:

рдФрд░ рдпрд╣рд╛рдБ, рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдзрд╛рд░рдХ рджреНрд╡рд╛рд░рд╛ рдмрд╣реБрдд рдХрдо рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрд╕реЗ рдпрд╣ рднреА рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреБрдВрдЬреА рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╛ рддреЛ GOST R 34.10-2001, рдпрд╛ GOST R 34.10-2012 рдФрд░ рдХрд┐рд╕ рдХреБрдВрдЬреА рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рд╛рдеред
рдЖрдк рдЙрджрд╛рд╣рд░рдг рджреЗрдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреА рд╡реИрдзрддрд╛ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рддреЛ рдХреБрдВрдЬреА рдХрд╣рд╛рдВ рд╣реИ?
рджреЛ рдФрд░ рдкреНрд░рд╢реНрди рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдзрд╛рд░рдХ рдПрдХ рдЙрддреНрддрд░ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ: рдореБрдЭреЗ рдореВрд▓ рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╣рд╛рдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ (рдпрд╛ рдЗрд╕рд╕реЗ рднреА рдмреЗрд╣рддрд░ рд╕рд┐рд░реНрдл рдПрдХ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ) рдФрд░ рдирд┐рд░рд╕реНрдд рдкреНрд░рдорд╛рдг рдкрддреНрд░реЛрдВ рдХреА рд╕реВрдЪреА рдкрд░ рдПрдХ рд╕рдорд╛рди рдкреНрд░рд╢реНрдиред
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд░рдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдЬреЛ рд░реВрд╕реА рдкреАрдХреЗрдЖрдИ / рдкреАрдХреЗрдЖрдИ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╣реИ рдФрд░ рдШрд░реЗрд▓реВ рдФрд░ рдЧреИрд░-
рдШрд░реЗрд▓реВ рдУрдПрд╕ рдкрд░ рдЪрд▓рддрд╛ рд╣реИред рдХреНрдпрд╛ рд╡рд┐рдХрд╛рд╕ рдХрд░рдирд╛ рд╣реИ? рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ, рдпрджрд┐ рдХреЗрд╡рд▓ рдЙрдирдХреЗ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкреНрд░рдХреГрддрд┐ рдХреЗ рдХрд╛рд░рдгред
рддрдм рдореБрдЭреЗ рдпрд╛рдж рдЖрдпрд╛ рдХрд┐ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╕реБрдВрджрд░ рд▓рд┐рдкрд┐ рднрд╛рд╖рд╛ Tcl (рдЯреВрд▓ рдХрдорд╛рдВрдб рд▓реИрдВрдЧреНрд╡реЗрдЬ) рдиреЗ рдЕрдкрдиреА
30 рд╡реАрдВ рд╡рд░реНрд╖рдЧрд╛рдВрда рдордирд╛рдИ рдереА ред рдЗрд╕ рдкрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд░рдирд╛ рдЦреБрд╢реА рдХреА рдмрд╛рдд рд╣реИред рдЗрд╕рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди (рдкреИрдХреЗрдЬ) рд╣реИрдВ рдЬреЛ рд▓рдЧрднрдЧ рд╣рд░ рдЪреАрдЬ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, ASN рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ asn рдкреИрдХреЗрдЬ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рд╣рдо рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ) рдПрдХ рдкрдХреНрдХреА рдкреИрдХреЗрдЬ рд╣реИред рдФрд░ рдПрдХ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЯреАрдХреЗ рдкреИрдХреЗрдЬ рд╣реИред
рд╕рднреА рдХреЛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ Pyton рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ Tkinter рдХреЗ рд╕рд╛рде рдФрд░ Perl рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдорд╛рдгрд┐рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд░ рдХреЛрдИ рдЕрдкрдиреЗ рд╕реНрд╡рд╛рдж рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЪреБрди рд╕рдХрддрд╛ рд╣реИред рд╣рдо Tcl / Tk рдХреЗ рдПрдХ рд╕рдореВрд╣ рдореЗрдВ рд░реБрдХрддреЗ рд╣реИрдВред
рд╣рдо gcr- рджрд░реНрд╢рдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╕реЗ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рдлрд┐рдХ рдбрд┐рдЬрд╛рдЗрди рдЙрдзрд╛рд░ рд▓реЗрдВрдЧреЗред рдФрд░ рдПрдХ рдФрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛ред
рдЪреВрдВрдХрд┐ рд╣рдмрд░ рдХрд╛
рдЕрдВрдЧреНрд░реЗрдЬреА рд╕рдВрд╕реНрдХрд░рдг рдерд╛ , рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдЗрдВрдЯрд░рдлреЗрд╕ (рд░реВрд╕реА / рдЕрдВрдЧреНрд░реЗрдЬреА) рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╣реЛред рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЦреНрдп рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ, рдкрд╢реНрдЪрд┐рдореА рджреБрдирд┐рдпрд╛ рдХреЗ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдирд╛рдЧрд░рд┐рдХ рд░реВрд╕реА рд╕рдВрдШ рдХреЗ рдирд╛рдЧрд░рд┐рдХ рдмрди рд░рд╣реЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╢реНрд╡ рдкреНрд░рд╕рд┐рджреНрдз рдЕрднрд┐рдиреЗрддрд╛ рдбреЗрдкрд░реНрдбреНрдпреВред рдЙрдиреНрд╣реЗрдВ рдЖрдкрддреНрддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ: рд╡рд╣ рдПрдХ рдлреНрд░рд╛рдВрд╕реАрд╕реА рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдлреНрд░рд╛рдВрд╕реАрд╕реА рд╕реЗ рдПрдХ рд╕реИрдиреНрдп рдЕрдиреБрд╡рд╛рджрдХ рднреА рд╣реВрдВ:

рдЗрд╕рд▓рд┐рдП рдлреНрд░реЗрдВрдЪ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреЛрдбрд╝рдирд╛ рдЖрд╕рд╛рди рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбреЗрдкрд░рдбрд┐рдпреВ рдХреЛ рдЕрдВрдЧреНрд░реЗрдЬреА рднрд╛рд╖рд╛ рд╕реЗ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рджреВрд╕рд░реА рдУрд░, рд╣рдорд╛рд░рд╛ рджреЗрд╢ рдмрд╣реБрд░рд╛рд╖реНрдЯреНрд░реАрдп рд╣реИ рдФрд░ рдпрд╣ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдШрд░реЗрд▓реВ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдФрд░ рдШрд░реЗрд▓реВ рдУрдПрд╕ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдХрдИ рд░рд╛рд╖реНрдЯреНрд░реАрдп рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реЛрдВред
рдереЛрдбрд╝рд╛ рдЖрдЧреЗ рдЪрд▓рдХрд░, рдпрд╣ рд╡рд╣реА рдЖрдпрд╛ рд╣реИ:

рд╣рдо рдПрдХ рдЕрдиреБрд╡рд╛рджрдХ рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ
рддреЛ, "рдЕрдиреБрд╡рд╛рджрдХ" рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ, рд╡рд╣ рд░рд╛рд╖реНрдЯреНрд░реАрдп рдзреНрд╡рдЬ рдХреЗ рдиреАрдЪреЗ рдЫрд┐рдкрд╛ рд╣реИред рдЕрдиреБрд╡рд╛рджрдХ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд╛ рд╕рдордиреНрд╡рдп рд╣реИ, рдЕрд░реНрдерд╛рддред рдХрд┐рд╕реА рднреА рд╕рдордп рдХрд┐рд╕реА рдЕрдиреНрдп рднрд╛рд╖рд╛ рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред Tcl / Tk рдореЗрдВ рдЕрдиреБрд╡рд╛рджрдХ рдХрд╛рд░реНрдп рд╕рдВрджреЗрд╢рдХ рдкреИрдХреЗрдЬ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:
package require msgcat
рд╡рд░реНрддрдорд╛рди рднрд╛рд╖рд╛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
msgcat::mclocale ru
"рдЕрдиреБрд╡рд╛рджрдХ" рдХреА рд╢рдмреНрджрд╛рд╡рд▓реА рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕реЗ ru.msg рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ:
# msgcat::mcset # mcset namespace import -force msgcat::mcset # mcset ru "Language" "" тАж
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдкрд╛рда рд╣реИ
рдЕрдиреБрд╡рд╛рджрдХ рдХреЗ рд╕рд╛рде рд╕реНрдХреНрд░рд┐рдкреНрдЯ: #!/usr/bin/wish -f # msgcat package require msgcat # ru msgcat::mclocale ru # ::msgcat::mc # mc namespace import msgcat::mc # [msgcat::mclocale].msg. # . msgcat::mcload [file join [file dirname [info script]]] # image create photo rf_32x21_f -file rf_32x21.png image create photo gb_32x21_f -file gb_32x21.png #, label .lab -text "[mc Language]: " -relief flat -bd 0 тАУbg snow -anchor sw -width 10 button .but_lang -image rf_32x21_f -command ::changelang -relief flat -bd 0 pack .lab -side left -pady {2 0} pack .but_lang -side left # proc ::changelang {} { # # if {[msgcat::mclocale] == "ru"} { msgcat::mclocale en .but_lang configure -image gb_32x21_f } else { msgcat::mclocale ru .but_lang configure -image rf_32x21_f } # .lab configure -text "[mc Language]: " }
рдЗрд╕ рд▓рд┐рдкрд┐ рдореЗрдВ, :: рдЪреИрдВрдЬрд▓реИрдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрдиреБрд╡рд╛рджрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕реЗ рддрдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде .but_lang рдмрдЯрди рджрдмрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЕрдиреБрд╡рд╛рджрдХ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
рдЕрдм рдЬрдм рд╣рдордиреЗ рдПрдХ рдЕрдиреБрд╡рд╛рджрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╣рдо рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкрдХреНрдХреА рдкреИрдХреЗрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
package require pki).
рдкрдХреНрдХреА рдкреИрдХреЗрдЬ рдХреЛ рдЖрд░рдПрд╕рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреБрдВрдЬреА рдФрд░ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдкреНрд░рдорд╛рдг рдкрддреНрд░ (proc :: pki :: x509 :: parse_cert) рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреА рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рд╣рдо рдЗрд╕ рдХреБрдВрдЬреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ:
# Handle RSA public keys by extracting N and E switch -- $ret(pubkey_algo) { "rsaEncryption" { set pubkey [binary format B* $pubkey] binary scan $pubkey H* ret(pubkey) ::asn::asnGetSequence pubkey pubkey_parts ::asn::asnGetBigInteger pubkey_parts ret(n) ::asn::asnGetBigInteger pubkey_parts ret(e) set ret(n) [::math::bignum::tostr $ret(n)] set ret(e) [::math::bignum::tostr $ret(e)] set ret(l) [expr {int([::pki::_bits $ret(n)] / 8.0000 + 0.5) * 8}] set ret(type) rsa } }
рд╣реИрд░рд╛рдиреА рдХреА рдмрд╛рдд рд╣реИ, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЕрднреА рднреА рд▓реМрдЯрддрд╛ рд╣реИ ((pubkey_algo))
рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдЕрдиреБрд░реЛрдз рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐ рд╕рдорд╛рди рд╣реИ (proc :: pki :: pkcs :: parse_csr):
# Parse public key, based on type switch -- $pubkey_type { "rsaEncryption" { set pubkey [binary format B* $pubkey] ::asn::asnGetSequence pubkey pubkey_parts ::asn::asnGetBigInteger pubkey_parts key(n) ::asn::asnGetBigInteger pubkey_parts key(e) set key(n) [::math::bignum::tostr $key(n)] set key(e) [::math::bignum::tostr $key(e)] set key(l) [expr {2**int(ceil(log([::pki::_bits $key(n)])/log(2)))}] set key(type) rsa } default { return -code error "Unsupported key type: $pubkey_type" } }
рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рд╡рд╣ рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдЬрд╛рдирдХрд╛рд░реА рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдЬ, рдЖрд░рдПрд╕рдП рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, GOST R 34.10-2012 (GOST R 34.10-2001 рднреА рдЕрдм рдХреЗ рд▓рд┐рдП рдЪрд╛рд░реЛрдВ рдУрд░ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ) рд╕рд╣рд┐рдд рдпреВрд░реЛрдкреАрдп рд╕рдВрдШ рдХреЗ рдЕрдгреНрдбрд╛рдХрд╛рд░ рдШрдЯрддрд╛ рдкрд░ рдЪрд╛рдмрд┐рдпрд╛рдБ, рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╣реИрдВред
рд▓реЗрдХрд┐рди рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдХреА ASN рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдЬреЛ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдпрд╛ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрд╡рдпрдВ рдХреБрдВрдЬреА рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рджрд┐рдП рдЧрдП рдорд╛рдиреЛрдВ рдореЗрдВ рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рдорд╛рдиреЛрдВ рдореЗрдВ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА ASN рд╕рдВрд░рдЪрдирд╛ рдЬреЛрдбрд╝реЗрдВ:
proc ::pki::x509::parse_cert {cert} { . . . ::asn::asnGetSequence cert subject ::asn::asnGetSequence cert pubkeyinfo # ASN- . binary scan $pubkeyinfo H* ret(pubkey_pubkeyinfo) . . . }
рд╕рдм рдХреБрдЫ, рдФрд░ рдХреБрдЫ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред рдЗрд╕ рддрд░рд╣, :: pki :: x509 :: parse_cert рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рд░рд▓ рдкреНрд░рдорд╛рдг рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд▓реМрдЯрд╛рддреА рд╣реИ рдХрд┐ рдпрд╣ рдЙрдиреНрд╣реЗрдВ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдпреЛрдЧреНрдп рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреЗ рд╕рд╛рде рд╕рдмреНрдЬреЗрдХреНрдЯрдЯреВрд▓), рдЕрд░реНрдерд╛рддреНред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╡рд┐рд╡реЗрдХ рдкрд░ рджреЗрддрд╛ рд╣реИред
рджреВрд╕рд░реА рдУрд░, :: pki :: x509 :: parse_cert рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ
tbs рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХрд╛ рдПрдХ рдкрд░рд┐рдгрд╛рдо рджреЗрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рд╕реЗ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ (рд╣рд╕реНрддрд╛рдХреНрд╖рд░) рдФрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рдкреНрд░рдХрд╛рд░ (signature_algo):
# set fd [open ┬лcert.pem┬╗ r] chan configure тАУtranslation binary set datacert [read $fd] close $fd # array set cert_parse [::pki::x509::parse_cert $datacert] # tbs- set cert_tbs_hex $cert_parse(cert)
рд╣рдо рдПрдХ tbs рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
proc ::pki::x509::parse_cert_pubkeyinfo {cert_tbs_hex} { array set ret [list] set wholething [binary format H* $cert_tbs_hex] ::asn::asnGetSequence wholething cert ::asn::asnPeekByte cert peek_tag if {$peek_tag != 0x02} { # Version number is optional, if missing assumed to be value of 0 ::asn::asnGetContext cert - asn_version ::asn::asnGetInteger asn_version ret(version) } ::asn::asnGetBigInteger cert ret(serial_number) ::asn::asnGetSequence cert data_signature_algo_seq ::asn::asnGetObjectIdentifier data_signature_algo_seq ret(data_signature_algo) ::asn::asnGetSequence cert issuer ::asn::asnGetSequence cert validity ::asn::asnGetUTCTime validity ret(notBefore) ::asn::asnGetUTCTime validity ret(notAfter) ::asn::asnGetSequence cert subject ::asn::asnGetSequence cert pubkeyinfo # hex asn- binary scan $pubkeyinfo H* ret(pubkeyinfo) return $ret(pubkeyinfo) }
рдФрд░ рдЬрдм рд╕реЗ рд╣рдо рд░реВрд╕реА рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рд╣рдо рддреБрд░рдВрдд GOST рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд▓рд┐рдЦреЗрдВрдЧреЗ:
proc parse_key_gost {pubkeyinfo_hex} { array set ret [list] set pubkeyinfo [binary format H* $pubkeyinfo_hex] ::asn::asnGetSequence pubkeyinfo pubkey_algoid ::asn::asnGetObjectIdentifier pubkey_algoid ret(pubkey_algo) #, - if {[string first "1 2 643 " $ret(pubkey_algo)] == -1} { return [array get ret] } ::asn::asnGetBitString pubkeyinfo pubkey set pubkey [binary format B* $pubkey] # binary scan $pubkey H* ret(pubkey) ::asn::asnGetSequence pubkey_algoid pubalgost #OID - ::asn::asnGetObjectIdentifier pubalgost ret(paramkey) #OID - ::asn::asnGetObjectIdentifier pubalgost ret(hashkey) #puts "ret(paramkey)=$ret(paramkey)\n" #puts "ret(hashkey)=$ret(hashkey)\n" #parray ret # : , return [array get ret] }
рд╣рд╛рдВ, рдореИрдВрдиреЗ рдЗрд╕реЗ рд▓рдЧрднрдЧ рдпрд╛рдж рдХрд┐рдпрд╛: рдкрдХреНрдХреА рдкреИрдХреЗрдЬ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рд╕рд░рдгреА рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ :: pki :: oids oids рдЬреЛ GOST рдФрд░ рдпреЛрдЧреНрдп рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд░рдЦрддреЗ рд╣реИрдВ рдпрд╛ рдмрд╕ рдЗрд╕ рд╕рд░рдгреА рдореЗрдВ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИрдВ:
package require pki # oid- set ::pki::oids(1.2.643.100.1) "OGRN" set ::pki::oids(1.2.643.100.5) "OGRNIP" set ::pki::oids(1.2.643.3.131.1.1) "INN" set ::pki::oids(1.2.643.100.3) "SNILS" set ::pki::oids(1.2.643.2.2.19) "GOST R 34.10-2001" set ::pki::oids(1.2.643.7.1.1.1.1) "GOST R 34.10-2012-256" set ::pki::oids(1.2.643.7.1.1.1.2) "GOST R 34.10-2012-512" set ::pki::oids(1.2.643.2.2.3) "GOST R 34.10-2001 with GOST R 34.11-94" set ::pki::oids(1.2.643.7.1.1.3.2) "GOST R 34.10-2012-256 with GOSTR 34.11-2012-256" set ::pki::oids(1.2.643.7.1.1.3.3) "GOST R 34.10-2012-512 with GOSTR 34.11-2012-512" set ::pki::oids(1.2.643.100.113.1) "KC1 Class Sign Tool" set ::pki::oids(1.2.643.100.113.2) "KC2 Class Sign Tool" . . .
рдЖрдк ru.msg рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝рдХрд░ рдЕрдиреБрд╡рд╛рджрдХ рдХреА рд╢рдмреНрджрд╛рд╡рд▓реА рдХреЛ рдлрд┐рд░ рд╕реЗ рднрд░ рд╕рдХрддреЗ рд╣реИрдВ:
mcset ru "GOST R 34.10-2001" " 34.10-2001" mcset ru "GOST R 34.10-2012-256" " 34.10-2012-256" mcset ru "GOST R 34.10-2012-512" " 34.10-2012-512" mcset ru "GOST R 34.10-2001 with GOST R 34.11-94" " 34.10-2001 34.11-94" mcset ru "GOST R 34.10-2012-256 with GOSTR 34.11-2012-256" " 34.10-2012-256 34.11-2012-256" mcset ru "GOST R 34.10-2012-512 with GOSTR 34.11-2012-512" " 34.10-2012-512 34.11-2012-512" . . .
:

рд░реВрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдФрд░ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдирд┐рд░рд╕реНрддреАрдХрд░рдг рд╕реВрдЪреА
рд░реВрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдЗрд╕ рдкрд░ рдкрд╣рд▓реЗ рд╣реА рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛ рдЪреБрдХреА рд╣реИред рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛, рдирд┐рд░рд╕реНрдд COS / CRL рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИред рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдФрд░ рдЙрд╕рдХреЗ рд╡рд┐рддрд░рдг рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб, рдУрдПрд╕ рдПрдХреНрд╕ (рдореИрдХрдУрдПрд╕) рдФрд░ рдПрдордПрд╕ рд╡рд┐рдВрдбреЛрдЬ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ, рдЖрдк рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреА рд╕рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
Tk (Tcl / Tk, Python / Tkinter, рдЖрджрд┐) рдХреЗ рд╡рд┐рд░реЛрдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЦреЛрдЬрдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рджреЛ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЗ рдмреАрдЪ 10 (рджрд╕) рдЕрдВрддрд░: gtk рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ gcr- рджрд░реНрд╢рдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдФрд░ Tk рдореЗрдВ рдкреНрд░рдорд╛рдгрд┐рдд рдкреНрд░рдорд╛рдгрд┐рдд рджреГрд╢реНрдп рдЙрдкрдпреЛрдЧрд┐рддрд╛ред

PKCS # 11 рдЯреЛрдХрди / рд╕реНрдорд╛рд░реНрдЯрдХрд╛рд░реНрдб рдкреНрд░рдорд╛рдгрдкрддреНрд░
рдКрдкрд░ рд╣рдордиреЗ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА (рдмреНрд░рд╛рдЙрдЬрд╝ рдХрд░реЗрдВ, рд░реВрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдирд┐рд░рд╕реНрдд рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреА рд╕реВрдЪреА, sha1 рдФрд░ sha256, рдЖрджрд┐ рджреНрд╡рд╛рд░рд╛ рдлрд╝рд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯреНрд╕) рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрддред рд▓реЗрдХрд┐рди рдЕрднреА рднреА PKCS # 11 рдЯреЛрдХрди / рд╕реНрдорд╛рд░реНрдЯрдХрд╛рд░реНрдб рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдкреНрд░рдорд╛рдг рдкрддреНрд░ рд╣реИрдВред рдФрд░ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдЗрдЪреНрдЫрд╛ рди рдХреЗрд╡рд▓ рдЙрдиреНрд╣реЗрдВ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдлрд┐рд░ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдкрд░ рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдВред рдпрд╣ рдХреИрд╕реЗ рдХрд░реЗрдВ, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗ:
