рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдкрд╣реЗрд▓реА: рдПрдХ рдХреНрд░рд┐рдкреНрдЯреЛ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рдореЗрдВ рдПрдХ WebMoney рдХреБрдВрдЬреА рдЖрдпрд╛рдд рдХрд░рдирд╛

рдПрдХ рд╡рд┐рдВрдбреЛрдЬ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдирд┐рдЬреА рдХреБрдВрдЬреА рдЖрдорддреМрд░ рдкрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХреАрд╕реНрдЯреЛрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреА рд╣реИред рдЗрди рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдкреНрд░рджрд╛рддрд╛ (рдмрд╛рдж рдореЗрдВ рд╕реАрдПрд╕рдкреА) рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рд╣реЛрддрд╛ рд╣реИред рдорд╛рдирдХ CSP (Microsoft Base рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд╝рд┐рдХ рдкреНрд░рджрд╛рддрд╛) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреБрдВрдЬрд┐рдпрд╛рдБ рдлрд╝реЛрд▓реНрдбрд░ C: \ Users \ [Vasia] \ AppData \ Roaming \ Microsoft \ Crypto рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рддреА рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЪрд╛рдмрд┐рдпрд╛рдБ рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рд╕реНрдореГрддрд┐ рдореЗрдВ рд╣реА рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреА рд╣реИрдВред



рд╕реБрд░рдХреНрд╖рд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП, рд╡реЗрдмрдордиреА рдХреБрдВрдЬреА (рдмрд╣реБрдд рд╣реА .kwm рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП рдЧрдП) рдХреЛ CSP рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред рдЖрдорддреМрд░ рдкрд░, рдЬреЛ рд▓реЛрдЧ WM рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рдЗрд╕реЗ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХ .kwm рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛ xml рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ - рджреЛрдиреЛрдВ рд╡рд┐рдХрд▓реНрдк рдмрд╣реБрдд рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИрдВред



рдпрд╣ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рдирд┐рдХрд▓рд╛ред



рдЕрдкрдиреА рднреБрдЧрддрд╛рди рд╕реЗрд╡рд╛ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдмрдврд╝рд╛рддреЗ рд╕рдордп рдЖрдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдкрдврд╝реЗрдВ, рдХрдЯ рдХреЗ рддрд╣рдд рдкрдврд╝реЗрдВред







So. рдЪрд▓рд┐рдП kwm рдлрд╛рдЗрд▓ рдлреЙрд░реНрдореЗрдЯ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдЬрдЯрд┐рд▓ рдкреНрд░рд╛рд░реВрдк рд╣реИ (рдЫреЛрдЯреА рдЪреАрдЬреЗрдВ рдЧрд╛рдпрдм рд╣реИрдВ):



1. рдЕрдЦрдВрдбрддрд╛ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реИрд╢ред

2. рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдирд┐рдЬреА рдЖрд░рдПрд╕рдП-рдкреНрд░рджрд░реНрд╢рдХ (рдбреА)ред

рдПрдЪред рдПрдирдХреНрд░рд┐рдкреНрдЯреЗрдб RSA рдореЙрдбреНрдпреВрд▓ (рдореЙрдбреНрдпреВрд▓рд╕)ред



рд╕рдорд╕реНрдпрд╛ рдирдВрдмрд░ 1: рдХреБрдВрдЬреА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ 8 рдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ 2 рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред



рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ: рдбреА рдФрд░ рдореЙрдбреБрд▓рд╕, рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП: рдПрдХреНрд╕рдкреЛрдиреЗрдВрдЯ, рдореЛрдбреБрд▓рд╕, рдкреА, рдХреНрдпреВ, рдбреАрдкреА, рдбреАрдХреНрдпреВ, рдЗрдирд╡рд░реНрд╕рдХреНрдпреВ, рдбреА (рдЙрд╕ рд╕рдВрд░рдЪрдирд╛ рдкрд░ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рд╕реАрдПрд╕рдкреА рдХреЗ рд▓рд┐рдП рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА рд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, MSDN msdn.microsoft.com/en- рджреЗрдЦреЗрдВ us / рдкреБрд╕реНрддрдХрд╛рд▓рдп / Aa387401 )ред



рдпрджрд┐ рд╣рдо рдИ (рдУрдкрди рдПрдХреНрд╕рдкреЛрдиреЗрдВрдЯ) рдЬрд╛рдирддреЗ рдереЗ, рддреЛ рдЗрди рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдЦреЛрдЬрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЖрдорддреМрд░ рдкрд░ E, Fermat рдореЗрдВ рд╕реЗ рдПрдХ рдирдВрдмрд░ рд▓реЗрддрд╛ рд╣реИ: рез the, реирел 6, ремрелрелрей 4 рдпрд╛ рекреи реп рек реп рем7реи репред



1. рд╣рдо рдЕрдкрдиреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдбреА рдФрд░ рдорд╛рдкреБрд▓рд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдордирдорд╛рдирд╛ рд╕рдВрджреЗрд╢ рд╕рдВрджреЗрд╢ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рддреЗ рд╣реИрдВ:



encrypted = message^D % Modulus









2. рдШрд╛рддрд╛рдВрдХ (рдорд╛рдирд╛) рдФрд░ рдорд╛рдкрд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛:



message = encrypted^Exponent % Modulus









рдпрджрд┐ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рдмрд╛рдж рдкреНрд░рд╛рдкреНрдд рд╕рдВрджреЗрд╢ рдореВрд▓ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ рдШрд╛рддрд╛рдВрдХ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред



рдиреЛрдЯ: рдЗрд╕рдХреЗ рдмрд╛рдж, рдСрдкрд░реЗрдЯрд░ "^" рдШрд╛рддрд╛рдВрдХ рд╣реИ, рдФрд░ рдСрдкрд░реЗрдЯрд░ "%" рд╡рд┐рднрд╛рдЬрди рдХрд╛ рд╢реЗрд╖ рд╣реИ ред



рд╕рдорд╕реНрдпрд╛ рд╕рдВрдЦреНрдпрд╛ 2: рд╣рдо рдЦреБрд▓реЗ рдкреНрд░рджрд░реНрд╢рдХ рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдХрд╛рдлреА рдмрдбрд╝рд╛ рд╣реИред



рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢, рдЗрдирдореЗрдВ рд╕реЗ рдПрдХ рднреА Fermat рд╕рдВрдЦреНрдпрд╛ рдПрдХ рдЦреБрд▓реЗ рдкреНрд░рддрд┐рдкрд╛рджрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╛рдордиреЗ рдирд╣реАрдВ рдЖрдИред рдпрд╣ рдереЛрдбрд╝рд╛ рдкрд░реЗрд╢рд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрдЦреНрдпрд╛ рдЕрднреА рднреА рдмрд╣реБрдд рдмрдбрд╝реА рдирд╣реАрдВ рд╣реИ - 4 рдмрд╛рдЗрдЯреНрд╕ рд╕реЗ рдХрдо рдХреА рд╕рднреА рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЧрдИ рд╣реИ (рдХреНрд░реВрд░ рдмрд▓)ред рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдирд╣реАрдВ рдЖрдпрд╛ред рдпрд╣ рдПрдХ рдорд░рд╛ рд╣реБрдЖ рдЕрдВрдд рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдХреЛрдИ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рднреВрд▓ рд╕рдХрддрд╛ рд╣реИ ...



рдпрд╣ рд╕рдорд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рдерд╛ред рдПрдХ рдЦреБрд▓рд╛ рдкреНрд░рджрд░реНрд╢рдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛: рд╡рд░реНрд╖реЛрдВ рдХреЗ рдХрдИ рджрд╕рд┐рдпреЛрдВ (рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕реИрдХрдбрд╝реЛрдВ) рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдмрд╛рдзреНрдп рдХрд░реЗрдВред



рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрд╣рд╛рдиреА рдЬрд╛рд░реА рд╣реИред рдорд╛рдЗрдХрд▓ рдЬреЗред рд╡реАрдирд░ рдЬреИрд╕рд╛ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рд░рд╣рддрд╛ рдерд╛, рдЬреЛ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдореВрд▓реНрдп рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрд░рдПрд╕рдП рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╣реИрдХ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд▓реЗрдХрд░ рдЖрдпрд╛ рдерд╛ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдереЛрдбрд╝рд╛ рд╡рд┐рдкрд░реАрдд рд╣реИ: рдЦреБрд▓реЗ рдШрд╛рддрд╛рдВрдХ рдХрд╛ рдЫреЛрдЯрд╛ рдореВрд▓реНрдп, рдЬрд┐рд╕реЗ рд╣рдо рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред



рджрд░рдЕрд╕рд▓, рдЖрд░рдПрд╕рдП рдкрд░ рд╡реАрдирд░ рдХреЗ рд╣рдорд▓реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рдХрд┐рд╕реА рднреА рдХреБрдВрдЬреА рдХреЗ рдЦреБрд▓реЗ рдШрд╛рддрд╛рдВрдХ рдХреЛ рддреБрд░рдВрдд рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдпрджрд┐ рдпрд╣ рдмрд╣реБрдд рд▓рдВрдмрд╛ рдирд╣реАрдВ рд╣реИ)ред



рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реБрдЖ:



рдореВрд▓ D рдФрд░ рдорд╛рдкрд╛рдВрдХ рдорд╛рди (kwm рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкреНрд░рд╛рдкреНрдд):



D: 19715AB67A97257C5C80C8CD8F97448199F6F3FF8A3724DEA911C32CB5E64395D3175D6112A51DC14911FBA4E8FD107C1C65BE062A3491B1131168DF423408E2593



Modulus: 789BE5F2D0C90430EAEFC640B752FE707D75EB12C9C76F776C981014C1825C48989F15F5F53AFBF9B9C11D5C9AF184CC4F3938A48045414F814636C1275321F3AB9









RSA рдкрд░ рд╡реАрдирд░ рдХреЗ рд╣рдорд▓реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдПрдХ рдЦреБрд▓рд╛ рдкреНрд░рджрд░реНрд╢рдХ рдХреЛ рддреБрд░рдВрдд рдмрд╣рд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:



Exponent: 21EA463DEB0B









рдпрд╣ рдПрдХ рдЫреЛрдЯреА рд╕реА рдмрд╛рдд рдХреА рддрд░рд╣ рд▓рдЧ рд░рд╣рд╛ рдерд╛: рдкреНрд░рд╛рдкреНрдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд┐рдЬреА рдХреБрдВрдЬреА BLOB рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд▓рд╛рдПрдВ рдФрд░ рдХрд┐рд╕реА рднреА рдХреНрд░рд┐рдкреНрдЯреЛ рдкреНрд░рджрд╛рддрд╛ рдореЗрдВ рдЖрдпрд╛рдд рдХрд░реЗрдВред рд▓реЗрдХрд┐рди рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ ...



рд╕рдорд╕реНрдпрд╛ 3: рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдШрд╛рддрд╛рдВрдХ 4 рдмрд╛рдЗрдЯреНрд╕ рд╕реЗ рдЕрдзрд┐рдХ рд▓рдВрдмрд╛ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдирд┐рдЬреА рдХреБрдВрдЬреА BLOBs рдкреНрд░рд╛рд░реВрдк рдХреЗрд╡рд▓ 4 рдмрд╛рдЗрдЯреНрд╕ рддрдХ рд▓рдореНрдмреА (4 рдмрд╛рдЗрдЯреНрд╕ рд╕рдореНрдорд┐рд▓рд┐рдд) рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред



рдХреНрдпрд╛ рддрдХрд▓реАрдл рд╣реИ! рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХреЛрдИ рд╣рд▓ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ (рджреВрд╕рд░реА рдмрд╛рд░) рднреВрд▓ рд╕рдХрддреЗ рд╣реИрдВред



рд╣рд╛рд▓рд╛рдВрдХрд┐ ... рдЖрдЦрд┐рд░рдХрд╛рд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрд░рд┐рдкреНрдЯреЛрд╕рд┐рд╕реНрдЯрдо рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдкреНрд░рд┐рдореНрд╕ рдкреА рдФрд░ рдХреНрдпреВ)ред рдЗрд╕рд▓рд┐рдП, рдЖрдк рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



1. рд╣рдо рдореВрд▓ рдкреИрд░рд╛рдореАрдЯрд░ P рдФрд░ Q рд▓реЗрддреЗ рд╣реИрдВред



2. рдЙрдкрдпреБрдХреНрдд рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреНрд░рддрд┐рдкрд╛рджрдХ рдШрд╛рддрд╛рдВрдХ 2 рдЪреБрдиреЗрдВ (4 рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рдЗрдЯреНрд╕ рдирд╣реАрдВ)ред рдлрд░рдореЗрдЯ рдирдВрдмрд░ 65537 рдкрд░ рд▓реЗрдВред



3. рдмрдВрдж рдШрд╛рддрд╛рдВрдХ D2 рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ (рд╕рдВрдЦреНрдпрд╛ рдИ рдореЛрдбреБрд▓реЛ (P-1) рдХреЗ рд╡рд┐рдкрд░реАрдд рдЧреБрдгрд╛) *

(рдХреНрдпреВ 1))ред D2 kwm рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдореВрд▓ D рд╕реЗ рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред



4. рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ: DP2, DQ2, InverseQ2ред рдЪреАрдиреА рд╢реЗрд╖ рдкреНрд░рдореЗрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЙрдиреНрд╣реЗрдВ рдЬрд▓реНрджреА рд╕реЗ рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред



5. рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд! рд╣рдо рдореВрд▓ рдбреА (рдЬреЛ рдореВрд▓ рдХреБрдВрдЬреА kwm рдореЗрдВ рд╣реИ) рдФрд░ рд╣рдорд╛рд░реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХреНрд░рд┐рдкреНрдЯреЛрдХрд░реЗрдВрд╕реА рдХреЗ рдбреА 2 (рдпрд╛рдиреА рдбреА 2 - рдбреА) рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред



рдЕрдм рд╕рдВрд╢реЛрдзрд┐рдд рдХреБрдВрдЬреА рдХреЛ CSP рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, eToken PRO) рдирд┐рдЬреА RSA рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╡рд┐рдЪрд▓рди рдХреЛ PKCS # 11 рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред Microsoft CSP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╡рд┐рдЪрд▓рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рднрдВрдбрд╛рд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╡рд┐рдЪрд▓рди рдХрд╛ рдореВрд▓реНрдп рдЧреБрдкреНрдд рдирд╣реАрдВ рд╣реИ, рдЕрдм рд╣рдорд╛рд░реА рд╕рдВрд╢реЛрдзрд┐рдд рдХреБрдВрдЬреА (рдЬреЛ рд╕реАрдПрд╕рдкреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ) рдЧреБрдкреНрдд рд╣реИред



рдпрд╣рд╛рдБ C # рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ CSP рдореЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдХреБрдВрдЬреА рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ:



public void ImportPrivateKey( byte [] modulusBytes, byte [] privateExponentBytes)

{

//



var modulus = new BigInteger(modulusBytes);

var d = new BigInteger(privateExponentBytes);



var p = Wiener.Calculate(d, modulus); // RSA P ( )

var q = modulus/p;

var f = (p - 1)*(q - 1); //

var e = new BigInteger( new byte [] {1, 0, 1}); // 65537



var d2 = e.modInverse(f); // d2 --



var dp2 = d2%(p - 1);

var dq2 = d2%(q - 1);

var iq = q.modInverse(p);



var rsaParameters = new RSAParameters

{

D = toByteArray(d2),

DP = toByteArray(dp2),

DQ = toByteArray(dq2),

Exponent = toByteArray(e),

InverseQ = toByteArray(iq),

Modulus = toByteArray(modulus),

P = toByteArray(p),

Q = toByteArray(q)

};



BigInteger deviation;

byte flag; // d > d2,



if (d > d2)

{

deviation = d - d2;

flag = 0;

}

else

{

deviation = d2 - d;

flag = 1;

}



// CSP ( eToken, CSP "eToken Base Cryptographic Provider")

var cspParameters = new CspParameters

{

Flags =

CspProviderFlags.UseNonExportableKey | CspProviderFlags.UseUserProtectedKey,

KeyNumber = ( int )KeyNumber.Exchange,

KeyContainerName = _containerName

};



//

RSACryptoServiceProvider.UseMachineKeyStore = false ;



using ( var cryptoServiceProvider = new RSACryptoServiceProvider(cspParameters))

{

//

cryptoServiceProvider.ImportParameters(rsaParameters);

}



// deviation ( )

Storage.SaveDataInStorage(_containerName, toByteArray(deviation));

Storage.SaveDataInStorage(_containerName + "_flag" , new [] {flag});

}




* This source code was highlighted with Source Code Highlighter .








рдЕрдм рд╕рдВрджреЗрд╢ рд╕рдВрджреЗрд╢ рдХрд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ?



рдореВрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:



signature = hash ^ D % Modulus









рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдбреА 2 рдФрд░ рд╡рд┐рдЪрд▓рди рд╣реИрдВ, рдФрд░ рдбреА 2 + рд╡рд┐рдЪрд▓рди = рдбреАред рдбреА 2 рддрдХ рдХреЛрдИ рд╕реАрдзреА рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ CSP рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЖрдк рдХреЗрд╡рд▓ рдорд╛рдирдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдЗрд╕ D2 рдХреЗ рд▓рд┐рдП рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдмреАрдЬрдЧрдгрд┐рдд рдпрд╛рдж рдХрд░реЗрдВ:



a^(b+c) = a^b * a^c









рдпрд╣ рдХрд╛рдиреВрди рдореЙрдбреНрдпреВрд▓рд░ рдмреАрдЬрдЧрдгрд┐рдд рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рддреЛ, рд╣рдорд╛рд░рд╛ рдореВрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ (рдбреА рдХреЗ рдЬреНрдЮрд╛рди рдХреЗ рдмрд┐рдирд╛) рдЗрд╕ рддрд░рд╣ рд╣реИ:



part1 = hash ^ D2 % Modulus



part2 = hash ^ deviation % Modulus



signature = part1 * part2 % Modulus









рд▓рд╛рдн! рдЕрдм рд╣рдорд╛рд░реА рдХреБрдВрдЬреА CSP рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рдХреА рдЧрдИ рд╣реИ (рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдмрд╣реБрдд рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИ)ред рдереЛрдбрд╝рд╛ рдЙрдкрджреНрд░рд╡ - рдкреВрд░реЗ "рдлрд┐рдЯ рдирд╣реАрдВ рд╣реБрдЖ", рд╡рд┐рдЪрд▓рди рдХреЗ рд░реВрдк рдореЗрдВ рдЕрднреА рднреА "рдЯреБрдХрдбрд╝рд╛" рдерд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдЪрд▓рди рдПрдХ рд░рд╣рд╕реНрдп рдирд╣реАрдВ рд╣реИ, рдбреА 2 рдХреЗ рдЬреНрдЮрд╛рди рдХреЗ рдмрд┐рдирд╛ рдпрд╣ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдореВрд▓ рдбреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╕реБрд░рд╛рдЧ рдирд╣реАрдВ рд▓рд╛рддрд╛ рд╣реИред



рд▓реЗрдХрд┐рди рдЖрд░рд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд▓реНрджреА рдордд рдХрд░реЛред



рд╕рдорд╕реНрдпрд╛ рд╕рдВрдЦреНрдпрд╛ 4: рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдбреЗрдЯрд╛ рдХреА рд╕рдВрд░рдЪрдирд╛ рдЖрдо рддреМрд░ рдкрд░ рд╕реНрд╡реАрдХреГрдд рдПрдХ рд╕реЗ рдЕрд▓рдЧ рд╣реИред



рдпрджрд┐ рд╣рдо Win CAPI рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рддреЗ рд╣реИрдВ (рдЖрдк рдЗрд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдШрд╛рддрд╛рдВрдХ рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ), рддреЛ рд╣рдо рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреА рддрд░рд╣ рдХреБрдЫ рджреЗрдЦреЗрдВрдЧреЗ:



1FFFFFFFFFFFFFFFFFFFFFFFF003031300D0609608648016503040201050004209F64A747E1B97F131FABB6B447296C9B6F0201E79FB3C5356E6C77E89B6A806









рд╢реБрд░реБрдЖрдд рдореЗрдВ рдорд╛рдирдХ рд╣реЗрдбрд░ рд╣реИ, рдФрд░ рдЕрдВрдд рдореЗрдВ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╕рдВрджреЗрд╢ рдХреЗ рд╣реИрд╢ рдХрд╛ 32 рдмрд╛рдЗрдЯреНрд╕ (SHA-256 рдХреЗ рд▓рд┐рдП рдЙрджреНрдзреГрдд) рд╣реИред



WebMoney Signer рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЕрд▓рдЧ рд╣реИрдВ: рдкрд╣рд▓реЗ рдмрд╛рдЗрдЯреНрд╕ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рд╕реЗ рднрд░реЗ рд╣реЛрддреЗ рд╣реИрдВ, рдлрд┐рд░ MD4 рд╣реИрд╢ рдХреЗ 16 рдмрд╛рдЗрдЯреНрд╕, рдлрд┐рд░ 2 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд╣реЗрдбрд░ред



рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╕реАрдПрд╕рдкреА рдореЙрдбреНрдпреВрд▓рд░ рдирд┐рдЬреА-рдХреБрдВрдЬреА рдкреНрд░рддрд┐рдкрд╛рджрдХ рдХреЗ рдкреНрд░рддреНрдпрдХреНрд╖ рдХрд╛рд░реНрдп рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдпрджрд┐ рдпрд╣ рд╕рдВрднрд╡ рдерд╛, рддреЛ рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реЛрдЧрд╛)ред рдХреЗрд╡рд▓ рдЕрдиреБрдорддрд┐ рд╣реИ:



1. рд╕рдВрджреЗрд╢ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░реЗрдВред рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╣рдореЗрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕реВрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗрдмрдордиреА рд╣рдорд╛рд░реЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рдорд╛рдиреНрдпрддрд╛ рдирд╣реАрдВ рджреЗрдЧреА - рд╕рдВрд░рдЪрдирд╛ рдЕрд▓рдЧ рд╣реИред



2. рд╕рдВрджреЗрд╢ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░реЗрдВред рдлрд┐рд░ рд╕реЗ - рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди (рдореВрд▓ рд╕рдВрджреЗрд╢ рд╕рдВрд╢реЛрдзрд┐рдд, рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдкреВрд░рдХ) - рдпрд╣ рд╣рдорд╛рд░реЗ рдкреНрд░рд╛рд░реВрдк рд╕реЗ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реИред



рдлрд┐рд░ рд╕реЗ рдЧрддрд┐рд░реЛрдзред рд╣рд╛рд▓рд╛рдВрдХрд┐ ... рдФрд░ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдЕрдкрдиреЗ рд╕реАрдПрд╕рдкреА рдХреЛ рдПрдХ рдЕрд╕рд▓реА рд╣реИрд╢ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдПрдХ рдЫрджреНрдо-рд╣реИрд╢ рдореЗрдВ рдбрд╛рд▓ рджреЗрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЙрд╕ рдбреЗрдЯрд╛ рдХреЛ рдбрд╛рд▓ рджреЗрдВрдЧреЗ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП? рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рддрд┐рд╡рд░реНрддреА рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣реИрд╢ рдЕрд╕рд▓реА рд╣реИ рдпрд╛ рдирд╣реАрдВред



рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЪреБрдирдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрд╛рдлреА рд▓рдВрдмрд╛ рд╣реИрд╢ рд╣реЛ: рддрд╛рдХрд┐ рд╣рдорд╛рд░рд╛ 16-рдмрд╛рдЗрдЯ рдПрдордбреА 4 рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ, рдФрд░ рдПрдХ 2-рдмрд╛рдЗрдЯ рд╣реЗрдбрд░, рдФрд░ рдпрд╣ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП, рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдХреЛ рдкреВрд░рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред



SHA-512 рдмрд╣реБрдд рдмрдбрд╝рд╛ рдирд┐рдХрд▓рд╛, рд▓реЗрдХрд┐рди SHA-256 рд╕рд╣реА рдерд╛ред



рдпрд╣рд╛рдБ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рд╣реИ:



public string Sign( string value )

{

if ( string .IsNullOrEmpty( value ))

throw new ArgumentNullException( "value" );



var toSign = new byte [32]; // - SHA256



var random = new byte [14]; //

var hash = getHash( value ); // MD4

var prefix = new byte [] {0, 56}; // WebMoney



var rngCryptoServiceProvider = new RNGCryptoServiceProvider();

rngCryptoServiceProvider.GetBytes(random);



Buffer.BlockCopy(random, 0, toSign, 0, random.Length);

Buffer.BlockCopy(hash, 0, toSign, random.Length, hash.Length);

Buffer.BlockCopy(prefix, 0, toSign, random.Length + hash.Length, prefix.Length);



var cspParameters = new CspParameters

{

Flags =

CspProviderFlags.UseNonExportableKey | CspProviderFlags.UseUserProtectedKey,

KeyNumber = ( int ) KeyNumber.Exchange,

KeyContainerName = _containerName

};



byte [] signature1;

BigInteger modulus;



using ( var rsaCryptoServiceProvider = new RSACryptoServiceProvider(528, cspParameters))

{

signature1 = rsaCryptoServiceProvider.SignHash(toSign, CryptoConfig.MapNameToOID( "SHA256" ));

modulus = new BigInteger(rsaCryptoServiceProvider.ExportParameters( false ).Modulus);

}



var deviation = new BigInteger(Storage.LoadDataFromStorage(_containerName));



// SHA-256

var header = new byte []

{

0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,

0x30,

0x31, 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01,

0x05,

0x00, 0x04, 0x20

};



var toEncrypt = new byte [65];



Buffer.BlockCopy(header, 0, toEncrypt, 0, header.Length);

Buffer.BlockCopy(random, 0, toEncrypt, header.Length, random.Length);

Buffer.BlockCopy(hash, 0, toEncrypt, header.Length + random.Length, hash.Length);

Buffer.BlockCopy(prefix, 0, toEncrypt, header.Length + random.Length + hash.Length, prefix.Length);



byte flag = Storage.LoadDataFromStorage(_containerName + "_flag" )[0];



var part1 = new BigInteger(signature1);

BigInteger part2;



if (1 == flag)

{

// -- --

part2 = new BigInteger(toEncrypt).modInverse(modulus).modPow(deviation, modulus);

}

else

part2 = new BigInteger(toEncrypt).modPow(deviation, modulus);



var signature = toByteArray((part1*part2)%modulus);



// little-endian

Array.Reverse(signature);



//

var uResult = new ushort [KeyBytesLength/2];



Buffer.BlockCopy(signature, 0, uResult, 0, signature.Length);



var stringBuilder = new StringBuilder ();



for ( int pos = 0; pos < uResult.Length; pos++)

stringBuilder.Append( string .Format(CultureInfo.InvariantCulture, "{0:x4}" , uResult[pos]));



return stringBuilder.ToString();

}




* This source code was highlighted with Source Code Highlighter .








рдЕрдм рд╕рдм рдХреБрдЫ рдПрдХ рдШрдбрд╝реА рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдХреБрдВрдЬреА рд╡рд┐рдВрдбреЛрдЬ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдбрд┐рд╡рд╛рдЗрд╕ (рдЙрд░реНрдл рдИрдЯреЛрдХрди, рд░реБрдмреЛрдЯреЗрди - рдЬреЛ рднреА рд╣реЛ) рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИ, рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╡реИрдз рд╣реИред



рдкреБрдирд╢реНрдЪ

рд▓реЗрдЦрдХ рд╕реЗред



рд╢рд╛рдпрдж рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдордЭрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ рдХрд┐ рдореИрдВрдиреЗ "рдЖрд╕рд╛рди рддрд░реАрдХрд╛" рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЪреБрдирд╛ред рдореИрдВ рд╕рдордЭрд╛рддрд╛ рд╣реВрдВ: рдореБрдЭреЗ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдкрд╣реЗрд▓рд┐рдпрд╛рдБ рдкрд╕рдВрдж рд╣реИрдВред рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдкрд╣реЗрд▓реА рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕ рд░реВрдк рдореЗрдВ рдкрд╣реЗрд▓рд┐рдпрд╛рдБ рдЕрдзрд┐рдХ рдкрд╕рдВрдж рд╣реИрдВред



All Articles