рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдИрдбреАрдПрд╕ рдмрдирд╛рдиреЗ рдХреЗ рддрдВрддреНрд░ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╕рдореАрдХреНрд╖рд╛
рд▓реЗрдЦ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдХреНрд░рд┐рдкреНрдЯреЛ-рдкреНрд░реЛ рд╕реАрдПрд╕рдкреА + рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреНрд▓рдЧ-рдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдЧрдИ рдереАред рдЬреИрд╕рд╛ рдХрд┐ рд╡рд╣рд╛рдВ рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛, рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╢рд░реНрддреЗрдВ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ CryptoPro CSP рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдФрд░ рдЙрд╕ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреА рд╕реНрдерд╛рдкрдирд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рд╡рд┐рдХрд▓реНрдк рдХрд╛рдлреА рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, XMLDsig рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рдВрд╕реНрдХрд░рдг 1.05.1418 рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдлрд╛рдЗрд▓реЗрдВ рднреЗрдЬрдирд╛ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рддреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреНрд░рд┐рдкреНрдЯреЛ-рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рд╕рд╣рд╛рдпрддрд╛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рдм рдХреБрдЫ рддрд░реАрдХреЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдХреЛ рдмреБрд▓рд╛рдХрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдлрд╛рдЗрд▓реЗрдВ рд╕рд░реНрд╡рд░ рдкрд░ рд╣реИрдВ рдФрд░ рдЖрдк рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдХрдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдкреВрд░реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдЪрд▓рд╛рдП рдмрд┐рдирд╛ рдЙрдиреНрд╣реЗрдВ рд╕рд╛рдЗрди рдЗрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?
рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ?
рддреЛ, рдХреНрд▓рд╛рдЗрдВрдЯ / рд╕рд░реНрд╡рд░ XMLDSig рдбрд┐рдЬрд┐рдЯрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдкреАрдврд╝реА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдоред
XMLDsig рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдЬрд╛рдирдХрд╛рд░реА
рдпрд╣рд╛рдБ рдорд┐рд▓ рд╕рдХрддреА
рд╣реИ ред
рдореИрдВ рдПрдХ xml рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдлрд╛рдлрд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рдЧрдарди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ред
рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд xml рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг:
<MyTestXml> <MySomeData>....</MySomeData> <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> <SignedInfo> <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /> <SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102001-gostr3411" /> <Reference URI=""> <Transforms> <Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116"> <XPath xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">not(ancestor-or-self::dsig:Signature)</XPath> </Transform> </Transforms> <DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr3411" /> <DigestValue>...</DigestValue> </Reference> </SignedInfo> <SignatureValue>...</SignatureValue> <KeyInfo> <X509Data> <X509Certificate>...</X509Certificate> </X509Data> </KeyInfo> </Signature> </MyTestXml>
рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреНрдпрд╛ рд╣реИрдВ, рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рд╕реЗ рдЯреИрдЧ рд╡рд┐рд╡рд░рдг рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЕрдиреБрд╡рд╛рдж рдХрд░реЗрдВ:
- рд╣рд╕реНрддрд╛рдХреНрд╖рд░ - рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдбреЗрдЯрд╛, рдЬрд┐рд╕рдореЗрдВ рд╕реНрд╡рдпрдВ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдФрд░ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
- SignedInfo- рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдбреЗрдЯрд╛ рдФрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдмрдирд╛рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
- CanonicalizationMethod - рдПрдХ рдирд╣рд░рдмрдВрджреА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ SignedInfo рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
- SignatureMethod - рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдФрд░ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред Canalized SignedInfo рдЯреИрдЧ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИред
- рд╕рдВрджрд░реНрдн - 1 рдпрд╛ рдЕрдзрд┐рдХ рдмрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдбреЗрдЯрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рд╕реНрдерд╛рди, рдбреЗрдЯрд╛ рд╕реЗ рд╣реИрд╢ рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо, рд░реВрдкрд╛рдВрддрд░рдг рдФрд░ рд╕реНрд╡рдпрдВ рд╣реИрд╢ рд╢рд╛рдорд┐рд▓ рд╣реИред
- рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо рдФрд░ рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдореЗрд╢рди рдСрди рдбреЗрдЯрд╛ред рд╕рдВрджрд░реНрдн рдЯреИрдЧ рдХреЗ URI рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ dereferencing рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдкрд╣рд▓реЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИред рдкрд┐рдЫрд▓реЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдж рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИ, рдЕрдВрддрд┐рдо рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо DigestMethod рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИред рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо рдЖрдорддреМрд░ рдкрд░ XPath рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред
- DigestMethod рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо рдкрд░рд┐рдгрд╛рдореЛрдВ рд╕реЗ рдПрдХ рд╣реИрд╢ рдЧрдгрдирд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╣реИред
- DigestValue рдЯреНрд░рд╛рдиреНрд╕рдлрд╝реЙрд░реНрдо рдкрд░рд┐рдгрд╛рдореЛрдВ рд╕реЗ рд╣реИрд╢ рдорд╛рди рд╣реИред рдЕрдХреНрд╕рд░ рдпрд╣ рд╕рдВрджрд░реНрдн URI рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЧрд┐рдд рдбреЗрдЯрд╛ рд╕реЗ рдПрдХ рд╣реИрд╢ рд╣реИред
- рд╕рд┐рдЧреНрдиреЗрдЪрд░рд╡реИрд▓реНрдпреВ - рд╕реНрд╡рдпрдВ рд╣рд╕реНрддрд╛рдХреНрд╖рд░, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдХрд▓реНрдкрдирд╛ рдХреА рдЧрдИ рд╣реИред
- KeyInfo - рдХреБрдВрдЬреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА, рдпрд╣рд╛рдБ X509Certificate рдЯреИрдЧ рдореЗрдВ рд░реБрдЪрд┐ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛ рд╕реЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдХреБрдВрдЬреА рд╕реЗ рдЖрдзрд╛рд░64 рдкреНрд░рдорд╛рдг рдкрддреНрд░ рд╢рд╛рдорд┐рд▓ рд╣реИред
рддреЛ, рд╕реНрд░реЛрдд рдбреЗрдЯрд╛:
- рд╕рд░реНрд╡рд░ рдкрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ xml-document рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рд╕рд░реНрд╡рд░ рдкрд░ CryptoPro .Net рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рд╕рдВрднрд╡ рд╣реИред
- рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рд╣рдореЗрдВ рдПрдХ OS рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ CryptoPro CSp 3.6 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рд╡рд┐рдВрдбреЛрдЬ 7 рдерд╛), рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЬреЛ CryptoPro EDS рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдФрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рдЬрд┐рд╕ рдХреБрдВрдЬреА рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреБрдВрдЬреА рдПрдХ USB рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рдкрд░ рдереА) ред
рдЧреНрд░рд╛рд╣рдХ рддреИрдпрд╛рд░реА:
- CryptoPro CSP 3.6 рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
- CryptoPro EDS рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреНрд▓рдЧрдЗрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
- рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рд╕реЗ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреЛ рд╕реНрдерд╛рдиреАрдп рднрдВрдбрд╛рд░рдг рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ ( рдирд┐рд░реНрджреЗрд╢ рджреЗрдЦреЗрдВ
рдкреИрд░рд╛ "2.5.2.2ред рдПрдХ рдирд┐рдЬреА рдХреБрдВрдЬреА рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреНрд░рдорд╛рдг рдкрддреНрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ ")
рдЪрд░рдг рд╕рдВрдЦреНрдпрд╛ 1ред (рд╕рд░реНрд╡рд░)рд╣рдо рдЙрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рддреИрдпрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕ рдкрд░ рд╣рдо рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВредрдЗрд╕ рд╕реНрддрд░ рдкрд░, рд╣рдореЗрдВ рд╕рдВрд░рдХреНрд╖рд┐рдд рдбреЗрдЯрд╛ рд╕реЗ рдкрд░рд┐рдХрд▓рд┐рдд рд╣реИрд╢ (DigestValue) рдХреЗ рд╕рд╛рде рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЯреИрдЧ рдХрд╛ рдПрдХ рдорд╕реМрджрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрди рд╣реИрд╢ рдХреА рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛
рдпрд╣рд╛рдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛
рд╣реИ , рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдХреНрд░рд┐рдкреНрдЯреЛрдкреНрд░реЛред рдиреЗрдЯ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрд╛рд▓рдп рдореЗрдВ рдЦрд░реАрджрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдВрддрд░рд┐рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдореИрдВрдиреЗ рдмрд╕ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рдкрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдореБрдЭреЗ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖред рдореБрдЭреЗ рдбреЗрдЯрд╛ рд╕реЗ рдкрд░рд┐рдХрд▓рд┐рдд рд╣реИрд╢ рдХреЗ рд╕рд╛рде рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдорд╛рдиреНрдп рд╕рд┐рдЧреНрдиреЗрдЪрд░рд╡реИрд▓реНрдпреВ рдФрд░ рдПрдХреНрд╕ 509 рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдХреЗ рд╕рд╛рдеред
рдЪрд░рдг рд╕рдВрдЦреНрдпрд╛ 2ред (рд╕рд░реНрд╡рд░)Canonicalize SignedInfo # 1 рдЪрд░рдг рдореЗрдВ рдЧрдард┐рддрдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ (рдкрд░рд┐рд╡рд░реНрдзрди рдХреЗ рд╕рд╛рде
рдпрд╣рд╛рдВ рд╕реЗ рд▓рд┐рдпрд╛
рдЧрдпрд╛ рд╣реИ ред рд╡рд┐рд╡рд╛рджрд┐рдд рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдореВрд▓ рдкрд╛рда):
- рдкрд╣рд▓рд╛ рдЪрд░рд┐рддреНрд░ "<", рдЕрдВрддрд┐рдо ">"ред
- рдЯреИрдЧ рдХреЗ рднреАрддрд░ рд╕рднреА рдордзреНрдпрд╡рд░реНрддреА рдЕрдВрддрд░рд┐рдХреНрд╖ рд╡рд░реНрдгреЛрдВ рдХреЛ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдореВрд▓ рд╕рднреА рдкреНрд░рдореБрдЦ рдЕрдВрддрд░рд┐рдХреНрд╖ рд╡рд░реНрдг рдЗрдирдмреЗрдЯреАрдЗрди рдХреЛ рдмрд░рдХрд░рд╛рд░ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред)
- рддрддреНрд╡реЛрдВ рдХреЛ рджреЗрдЦреЗрдВ
<tag />
рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ <tag></tag>
- рд▓рд╛рдЗрди рдЕрдВрдд рдХреЛ LF (0x0A) рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рд╕реЗрдЯ рдирд╛рдорд╕реНрдерд╛рди xmlns = " www.w3.org/2000/09/xmldsig# " "SignedInfo рдЯреИрдЧ рдкрд░ (рдЕрдВрдЧреНрд░реЗрдЬрд╝реА рдореЗрдВ рдореВрд▓ рдирд╛рдорд╕реНрдерд╛рди xmlns =" www.w3.org/2000/09/xmldsig# "рдореВрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рддрддреНрд╡ рд╕реЗ рдиреАрдЪреЗ рдкреНрд░рдЪрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) )ред
- рдЯреИрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╡рд░реНрдгрдорд╛рд▓рд╛ рдХреНрд░рдо рдореЗрдВ рдЯреИрдЧ рдХреЗ рдЕрдВрджрд░ рд╕реНрдерд┐рдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП (рд╕рд┐рдЧреНрдиреЗрдЪрд░рдкреНрд░реЛрдПрд╕реНрдкреЗрд░реНрдЯреА рдпреБрдХреНрдд рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдмрдирд╛рддреЗ рд╕рдордп рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╕реНрд╡рдпрдВ рдкреНрд░рдХрдЯ рд╣реЛрддреА рд╣реИ)
C # рдХреЛрдб рдЬреЛ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
XmlNode xmlNode = xmlElement.GetElementsByTagName("SignedInfo")[0]; XmlDocument xmlDocumentSignInfo = new XmlDocument(); xmlDocumentSignInfo.PreserveWhitespace = true; xmlDocumentSignInfo.LoadXml(xmlNode.OuterXml); result = Canonicalize(xmlDocumentSignInfo);
рдЬрд╣рд╛рдВ:
public string Canonicalize(XmlDocument document) { XmlDsigExcC14NTransform xmlTransform = new XmlDsigExcC14NTransform(); xmlTransform.LoadInput(document); string result = new StreamReader((MemoryStream)xmlTransform.GetOutput()).ReadToEnd();
рдЪрд░рдг рд╕рдВрдЦреНрдпрд╛ 3редCanalized SignedInfo рд╕реЗ рд╣реИрд╢ рд▓реЗрдВред2 рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ: рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯред
3.1) рдЧреНрд░рд╛рд╣рдХ рдкрд░ рдПрдХ рд╣реИрд╢ рд▓реЗрдирд╛ред рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдкрд╣рд▓реЗ рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛:
рд╕рд░реНрд╡рд░ рдкрд░, рд╣рдо base64 рдореЗрдВ Canalized SignedInfo рдХреЛ рдПрдирдХреЛрдб рдХрд░рддреЗ рд╣реИрдВ
C #:
string b64CanonicalizeSignedInfo= Convert.ToBase64String(Encoding.UTF8.GetBytes(s));
рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдпрд╣ рдбреЗрдЯрд╛ рднреЗрдЬреЗрдВред
рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рд╣рдо рдХреНрд░рд┐рдкреНрдЯреЛ-рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдкреНрд▓рдЧрдЗрди рдХреА рдорджрдж рд╕реЗ рд╣реИрд╢ рд▓реЗрддреЗ рд╣реИрдВ
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ:
var CADESCOM_HASH_ALGORITHM_CP_GOST_3411 = 100; var CADESCOM_BASE64_TO_BINARY = 1; var hashObject = CreateObject("CAdESCOM.HashedData"); hashObject.Algorithm = CADESCOM_HASH_ALGORITHM_CP_GOST_3411; hashObject.DataEncoding = CADESCOM_BASE64_TO_BINARY; hashObject.Hash(hexCanonicalSignedInfo);
рдЖрдк hashObject.Value рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣реИрд╢ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ
3.2) рд╣рдо рд╕рд░реНрд╡рд░ рдкрд░ рд╣реИрд╢ рдкрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рднреЗрдЬрддреЗ рд╣реИрдВред рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╕рдЪ рдХрд╣реВрдВ рддреЛ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░рддрд╛ред
рд╣реИрд╢ (C # рд╕рд░реНрд╡рд░) рд▓реЗрдВ:
HashAlgorithm myhash = HashAlgorithm.Create("GOST3411"); byte[] hashResult = myhash.ComputeHash(anonicalSignedInfoByteArr);
рд╢рд╛рдпрдж рд╣реИрд╢ рдХреЛ рдмреЗрд╕ 64 рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред
рд╣рдо рдЧреНрд░рд╛рд╣рдХ рдХреЛ рднреЗрдЬрддреЗ рд╣реИрдВ, рд╡рд╣рд╛рдВ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ
var hashObject = CreateObject("CAdESCOM.HashedData"); hashObject.SetHashValue(hashFromServer);
рдпрд╣ hashObject.SetHashValue рд╡рд┐рдзрд┐ рдкрд░ рдерд╛ рдХрд┐ рдореБрдЭреЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реАред рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛, рд▓реЗрдХрд┐рди рдХреНрд░рд┐рдкреНрдЯреЛ рдордВрдЪ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рд╡реЗ рдХрд┐рд╕реА рддрд░рд╣ рдЗрд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрджрд┐ рдЖрдк рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд╣реИрд╢ рдЬрдирд░реЗрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣рд╛рдВ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрд╕ рджрд┐рдП рдЧрдП рд╣реИрдВ:
1) рдПрдХ рдЦрд╛рд▓реА рд▓рд╛рдЗрди рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ рд╣реИрд╢ рдХреА рдЧрд┐рдирддреА рдХрд░реЗрдВред рдпрд╣ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕рдорд╛рди рд╣реИрдВред
GOST3411 рдХреЗ рд▓рд┐рдП, рдпреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореВрд▓реНрдп рд╣реИрдВ:
base64: mB5fPKMMhBSHgw + E + 0M + E6wRAVabnBNYSsSDI0zWVsA =
рд╣реЗрдХреНрд╕: 98 1e 5 рдПрдл 3 рд╕реА рдП 3 0 рд╕реА 84 14 87 83 83 рдПрдлрдПрдл 84 рдПрдлрдмреА 43 3e 13 рдПрд╕реА 11 01 56 9 рдмреА 9 рд╕реА 13 58 4 рдП рд╕реА 4 83 23 4 рд╕реА рдбреА 6 56 рд╕реА0
2) рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдФрд░ рд╕рд░реНрд╡рд░ рдореИрдЪ рдкрд░ рдЙрддреНрдкрдиреНрди рдордирдорд╛рдиреЗ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рд╣реИрд╢ред
рдЙрд╕рдХреЗ рдмрд╛рдж, SignedInfo рд╕реЗ рдХреЗрд╡рд▓ рд╣реИрд╢ рдХреЛ рдкреВрд░реЗ SignedInfo рдХреЗ рдмрдЬрд╛рдп рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЪрд░рдг рд╕рдВрдЦреНрдпрд╛ 4. (рдЧреНрд░рд╛рд╣рдХ)SignatureValue рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ рдФрд░ SignatureValue рд╕рд░реНрд╡рд░ рдФрд░ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдЬрд╛рдирдХрд╛рд░реА рднреЗрдЬреЗрдВ var certNumber=2;
рд╕рд░реНрд╡рд░ binReversedSignatureString рдФрд░ certValue рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯреЗрдВред
рдореИрдВ рдмрд░реНрддрдиреЛрдВ рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб рдЕрдкрд▓реЛрдб рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред рдЙрдиреНрд╣реЛрдВрдиреЗ рдореБрдЭреЗ рдХреНрд░рд┐рдкреНрдЯреЛрдХрд░рдВрд╕реА рдлреЛрд░рдо рдкрд░ рдмрддрд╛рдпрд╛ рдФрд░ рдЖрдк рдЗрд╕реЗ рдЗрд╕
рдзрд╛рдЧреЗ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ
рдЪрд░рдг рд╕рдВрдЦреНрдпрд╛ 5ред (рд╕рд░реНрд╡рд░)рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдЪрд░рдг # 1 рдореЗрдВ рдмрдирд╛рдП рдЧрдП рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЯреИрдЧ рдореЗрдВ рд╕рд┐рдЧреНрдиреЗрдЪрд░рд╡реИрд▓реНрдпреВ рдФрд░ рдПрдХреНрд╕ 509 рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдЯреИрдЧ рдмрджрд▓реЗрдВредрдЪрд░рдг рд╕рдВрдЦреНрдпрд╛ 6ред (рд╕рд░реНрд╡рд░)рд╣рдо рдХрд╛рд░реНрдб рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВредрдпрджрд┐ рд╕рддреНрдпрд╛рдкрди рд╕рдлрд▓ рд░рд╣рд╛, рддреЛ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред рдирддреАрдЬрддрди, рд╣рдо рд╕рд░реНрд╡рд░ рдкрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЖрдЧреЗ рдФрд░ рдкреАрдЫреЗ рдХрд┐рдП рдмрд┐рдирд╛ред
рдиреЛрдЯ: рдпрджрд┐ рдЖрдк рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдЪрд░рдг рд╕рдВрдЦреНрдпрд╛ 1 рд╕реЗ рдкрд╣рд▓реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕реЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЪрд░рдг рд╕рдВрдЦреНрдпрд╛ 6 рдХреЗ рдмрд╛рдж рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд╡рд╛рдкрд╕ рд╕рдВрд▓рдЧреНрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрдВрдд рдореЗрдВ, рдореИрдВ CryptoPro dmishin рдХреЗ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреА рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ Fomich рдлреЛрд░рдо рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЛ рдвреВрдВрдврддрд╛ рд╣реВрдВред
рдЙрдирдХреА рд╕рд▓рд╛рд╣ рдХреЗ рдмрд┐рдирд╛, рдореИрдВ рдЗрд╕ рдХреЗ рд╕рд╛рде рдХрдИ рдмрд╛рд░ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдлреНрд▓реЙрдк рд╣реЛ рдЬрд╛рддрд╛ред