рдореИрдВ рддреБрд░рдВрдд рдПрдХ рдЖрд░рдХреНрд╖рдг рдХрд░реВрдВрдЧрд╛ - рдореИрдВ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рдбрд┐рдЬрд┐рдЯрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ (рдИрдбреАрдПрд╕) рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд▓рдЧрднрдЧ рдПрдХ рд╢реМрдХрд┐рдпрд╛ рд╣реВрдВред рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдкреНрд░рд╛рдХреГрддрд┐рдХ рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рд╣реЛрдХрд░, рдореИрдВрдиреЗ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗрдВрджреНрд░реЛрдВ рдореЗрдВ рдбрд┐рдЬрд┐рдЯрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ 100500 рд▓реЗрдЦреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рддреИрдпрд╛рд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХрдИ рдирд┐рд░реНрджреЗрд╢ рджрд┐рдПред рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдкрд░, рдпрд╣ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдпрджрд┐ рдЖрдк "рдЕрдиреБрднрд╡реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░" рдХреА рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдПрдХ рдЕрдХреБрд╢рд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВ рднреА рдХрдо рд╕реЗ рдХрдо "рдЕрдиреБрднрд╡реА" рдмрдирдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдФрд░ рдЕрдВрджрд░ рд╕реЗ рдЗрд╕ рд░рд╕реЛрдИ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВред рдордЬрд╝реЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕реАрдЦрд╛ рдХрд┐ рдХреИрд╕реЗ рдкреАрдЬреАрдкреА рдХреБрдВрдЬреА рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ, рдПрдХ рдЕрдпреЛрдЧреНрдп рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХреА рдкреНрд░рд╛рдорд╛рдгрд┐рдХрддрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВред рдпрд╣ рд╕рдордЭрддреЗ рд╣реБрдП рдХрд┐ рдХреЛрдИ рднреА рдЕрдореЗрд░рд┐рдХрд╛ рдЦреБрд▓рд╛ рдирд╣реАрдВ рд╣реИ, рдореИрдВ, рдлрд┐рд░ рднреА, рдИрдбреАрдПрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╢реМрдХреАрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЫреЛрдЯреЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВрдиреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдФрд░ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдирд╣реАрдВ рдЙрддрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рд╕рд╡рд╛рд▓ рдХрд╛ рд╕рд┐рд░реНрдл рдПрдХ рдЫреЛрдЯрд╛ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкрд░рд┐рдЪрдп рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдПред рдЬреЛ рд▓реЛрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдИрдбреАрдПрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рдкрд░рд┐рдЪрд┐рдд рдХреЗ рд▓рд┐рдП - рдмрд╕ рд╕рд╣реАред
рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреНрдпрд╛ рд╣реИ
рд╕рднреА рдирд┐рдпрдо рдФрд░ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рдХрд╛рдиреВрди рдореЗрдВ рджреА рдЧрдИ рд╣реИрдВ , рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╕рдм рдХреБрдЫ рд░рд╛рдЬреНрдп рдХрд░реЗрдВрдЧреЗ, рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рдЕрдкрдиреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╢рдмреНрджреЛрдВ рдХреЗ рдкреВрд░реНрдг рдХрд╛рдиреВрдиреА рд╕рдЯреАрдХрддрд╛ рдХрд╛ рдвреЛрдВрдЧ рдХрд┐рдП рдмрд┐рдирд╛ред
рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рдбрд┐рдЬрд┐рдЯрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ (рдИрдбреАрдПрд╕) рдПрдХ рдЙрдкрдХрд░рдг рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд▓реЗрдЦрдХ (рдпрд╛ рдХрд┐рд╕реА рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдХрд░реНрддрд╛) рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╣ рд╡реНрдпрдХреНрддрд┐ рд╣реИ рдЬреЛ рдЦреБрдж рдХреЛ рд▓реЗрдЦрдХ рдХрд╣рддрд╛ рд╣реИред рдЗрд╕ рдЕрд░реНрде рдореЗрдВ, рдИрдбреАрдПрд╕ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрд░реВрдк рд╣реИ: рдпрджрд┐ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ "рдХрд╛рдЧрдЬрд╝" рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рд▓реЗрдЦрдХ рдЗрд╡рд╛рдиреЛрд╡ рд╣реИ, рдФрд░ рдкреЗрдЯреНрд░реЛрд╡ рдХрд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдиреАрдЪреЗ рд╣реИ, рддреЛ рдЖрдк рдЗрд╡рд╛рдиреЛрд╡ рдХреЗ рд▓реЗрдЦрдХ рд╣реЛрдиреЗ рдкрд░ рд╕рдВрджреЗрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕рд░рд▓ рдФрд░ рдмрдврд╝рд╛рдпрд╛ рд╣реИ ред рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдорд╛рдирдХ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ; рд╕рднреА рдкреНрд░рдорд╛рдгреАрдХрд░рдг рддрд░реАрдХреЗ (рдкреНрд░рд╛рдзрд┐рдХрд░рдг) рдЬреЛ рдИрдбреАрдПрд╕ рдХреЗ рдпреБрдЧ рд╕реЗ рдкрд╣рд▓реЗ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдП рдЧрдП рдереЗ - рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рд╕рд░рд▓ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реИред рдпрджрд┐ рдЖрдк, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реЗрд╡рд╛рдУрдВ рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкрдВрдЬреАрдХреГрдд рд╣реИрдВ, рддреЛ рдПрдХ рдмрд╣реБрдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдХреЗрдВрджреНрд░ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдХрд░ рдЕрдкрдиреА рдкрд╣рдЪрд╛рди рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рд╕рд░рдХрд╛рд░реА рдирд┐рдХрд╛рдпреЛрдВ рдХреЛ рдЕрдкреАрд▓ рднреЗрдЬреЗрдВ, рддреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реЗрд╡рд╛рдУрдВ рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рдЖрдкрдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХрд╛ рдЖрдВрддрд░рд┐рдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реЛрдЧрд╛ред
рдореИрдВ рдПрдХ рдмрд╛рд░ рдПрдХ рд╕рдВрдЧрдарди рдореЗрдВ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХреЗ рдРрд╕реЗ рддрд░реАрдХреЗ рд╕реЗ рдорд┐рд▓рд╛ рдерд╛: рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕рдХрд╛ рд╣реИрд╢ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ( , ). ( ) , . , : , fetch- ajax- . , : , .
. ; , , . - ( , , ), : . ; (public key), тАФ (private key). , , .
, ( ? ) , , , . , , , . , , , .
, : , тАФ . ( ) . , , , , - ! . ( ), , .
. , . : . ( ) . , , , , .
. (detach), . , - .
? : , . :
, , , ┬л┬╗. , . , , . : , . , ...
. , , , ( , ). ( ), . , , (fingerprint), , , . , , , , , . , ( 40 ).
, , , тАФ , . . : , ( ). , , .
, (, ) , . , ( ): .
, : - (, ) . , , .
, ( ) ( ). , (, ). (, ) , , .
, . , , , (public key) (private key).
. , , PGP (Pretty Good Privacy). 1991 , (, OpenPGP). 1999 GNU Privacy Guard (GnuPG, GPG). GPG ; - Windows , , gpg4win. - .
, (- , - root')
gpg --full-generate-key
:
- ┬лRSA RSA ( )┬╗;
- , 2048 ;
- ┬л ┬╗;
- , , ,
; ; - , .
GPG , . , , , GPG . , , , .
( , , , , ) :
gpg --export -a " " > public.key
gpg --export-secret-key -a " " > private.key
, private.key
, public.key
.
, (ASCII) :
gpg -ba __
, asc
. , , privet.doc
, privet.doc.asc
. , , privet.sig
, .
, , , :
from Tkinter import *
from tkFileDialog import *
import os, sys, tkMessageBox
def die(event):
sys.exit(0)
root = Tk()
w = root.winfo_screenwidth()//2 - 400
h = root.winfo_screenheight()//2 - 300
root.geometry("800x600+{}+{}".format(w, h))
root.title(" ")
flName = askopenfilename(title=" ?")
if flName:
os.system("gpg -ba " + flName)
button = Button(text=" ")
button.bind("<Button-1>", die)
button.pack(expand=YES, anchor=CENTER)
else:
die()
root.mainloop()
, , , ( ) , :
gpg --verify __ __
- (, ):
public.key
, () , , GPG;- - , .
- ( , ) .
, OpenPGP.js; ( тАФ 506 ) dist/lightweight/openpgp.min.js
html- ( meta-):
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"></head>
<body>
<label for="doc"> </label>
<input id="doc" type="file" onChange="readDoc('doc')">
<label for="sig"> </label>
<input id="sig" type="file" onChange="readDoc('sig')">
<button type="button" disabled onClick="check()"></button>
<output></output>
<script src="openpgp.min.js"></script>
<script src="validate.js"></script>
</body>
</html>
, public.key
openpgp.min.js
, .
validate.js
:
"use strict";
let cont = {doc:'', sig:''},
flag = {doc:false, sig:false},
pubkey = '',
mess = '';
const readDoc = contKey => {
let reader = new FileReader();
reader.onload = async e => {
cont[contKey] = contKey == "sig" ?
e.target.result :
new Uint8Array(e.target.result);
flag[contKey] = true;
pubkey = await (await fetch("public.key")).text();
if (flag["doc"] && flag["sig"])
document.querySelector("button").disabled = false;
}
reader.onerror = err => alert(" ");
let fileObj = document.querySelector(`#${contKey}`).files[0];
if (contKey == "sig") reader.readAsText(fileObj);
else reader.readAsArrayBuffer(fileObj);
}
const check = async () => {
try {
const verified = await openpgp.verify({
message: openpgp.message.fromBinary(cont["doc"]),
signature: await openpgp.signature.readArmored(cont["sig"]),
publicKeys: (await openpgp.key.readArmored(pubkey)).keys
});
const {valid} = verified.signatures[0];
mess = " !";
if (valid) mess = " .";
} catch(e) {mess = " .";}
document.querySelector("output").innerHTML = mess;
}
рд╡рд╣, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдм рд╣реИред рдЕрдм, GOST 7.0.97тАУ2016 рдХреЗ рдЦрдВрдб 5.23 рдХреЗ рдЕрдиреБрд╕рд╛рд░ , рдЖрдк рдЗрд╕ рдЦреВрдмрд╕реВрд░рдд рддрд╕реНрд╡реАрд░ рдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрд░ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрд╕ рд╕реНрдерд╛рди рдкрд░ рдЬрд╣рд╛рдВ рд╣рд╕реНрддрд▓рд┐рдЦрд┐рдд рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП):
