ูƒูŠููŠุฉ ุนู…ู„ ุชูˆู‚ูŠุน ุฅู„ูƒุชุฑูˆู†ูŠ ุจู†ูุณูƒ

ุณุฃุญุฌุฒ ุนู„ู‰ ุงู„ููˆุฑ - ุฃู†ุง ุชู‚ุฑูŠุจู‹ุง ู‡ุงูˆูŠ ููŠ ุงู„ุฃู…ูˆุฑ ุงู„ู…ุชุนู„ู‚ุฉ ุจุงู„ุชูˆู‚ูŠุน ุงู„ุฑู‚ู…ูŠ ุงู„ุฅู„ูƒุชุฑูˆู†ูŠ (EDS). ููŠ ุงู„ุขูˆู†ุฉ ุงู„ุฃุฎูŠุฑุฉ ุŒ ุจุฏุงูุน ุงู„ูุถูˆู„ ุงู„ุทุจูŠุนูŠ ุŒ ู‚ุฑุฑุช ูุฑุฒ ู‡ุฐุง ู‚ู„ูŠู„ุงู‹ ูˆูˆุฌุฏุช 100500 ู…ู‚ุงู„ุฉ ุนู„ู‰ ุงู„ุฅู†ุชุฑู†ุช ุญูˆู„ ู…ูˆุถูˆุน ุงู„ุญุตูˆู„ ุนู„ู‰ ุดู‡ุงุฏุงุช ุงู„ุชูˆู‚ูŠุน ุงู„ุฑู‚ู…ูŠ ููŠ ู…ุฑุงูƒุฒ ุงู„ุดู‡ุงุฏุงุช ุงู„ู…ุฎุชู„ูุฉ ุŒ ุจุงู„ุฅุถุงูุฉ ุฅู„ู‰ ุงู„ุนุฏูŠุฏ ู…ู† ุงู„ุฅุฑุดุงุฏุงุช ู„ุงุณุชุฎุฏุงู… ุงู„ุนุฏูŠุฏ ู…ู† ุงู„ุชุทุจูŠู‚ุงุช ุงู„ุฌุงู‡ุฒุฉ ู„ุชูˆู‚ูŠุน ุงู„ู…ุณุชู†ุฏุงุช. ููŠ ุจุนุถ ุงู„ุฃู…ุงูƒู† ุŒ ุฐูƒุฑ ุจุดูƒู„ ุนุงุจุฑ ุฃู†ู‡ ูŠู…ูƒู† ุนู…ู„ ุชูˆู‚ูŠุน ุบูŠุฑ ู…ุงู‡ุฑ ุจุดูƒู„ ู…ุณุชู‚ู„ ุฅุฐุง ูƒู†ุช ุชุณุชุฎุฏู… ุฎุฏู…ุงุช "ู…ุจุฑู…ุฌ ู…ุชู…ุฑุณ".


ุฃุฑุฏุช ุฃูŠุถู‹ุง ุฃู† ุฃุตุจุญ ุนู„ู‰ ุงู„ุฃู‚ู„ "ู…ู† ุฐูˆูŠ ุงู„ุฎุจุฑุฉ" ูˆูู‡ู… ู‡ุฐุง ุงู„ู…ุทุจุฎ ู…ู† ุงู„ุฏุงุฎู„. ู…ู† ุฃุฌู„ ุงู„ู…ุชุนุฉ ุŒ ุชุนู„ู…ุช ูƒูŠููŠุฉ ุฅู†ุดุงุก ู…ูุงุชูŠุญ PGP ุŒ ูˆุชูˆู‚ูŠุน ุงู„ู…ุณุชู†ุฏุงุช ุจุชูˆู‚ูŠุน ุบูŠุฑ ู…ุคู‡ู„ ุŒ ูˆุงู„ุชุญู‚ู‚ ู…ู† ุตุญุชู‡ุง. ู…ู† ุฎู„ุงู„ ูู‡ู… ุฃู†ู‡ ู„ุง ุชูˆุฌุฏ ุฃู…ุฑูŠูƒุง ู…ูุชูˆุญุฉ ุŒ ูุฅู†ู†ูŠ ู…ุน ุฐู„ูƒ ุฃู‚ุฏู… ู‡ุฐุง ุงู„ุจุฑู†ุงู…ุฌ ุงู„ุชุนู„ูŠู…ูŠ ุงู„ู‚ุตูŠุฑ ู„ู„ู‡ูˆุงุฉ ุงู„ุฐูŠู† ู‡ู… ู…ุซู„ูŠ ููŠ ู…ุณุงุฆู„ ุงู„ุนู…ู„ ู…ุน ุงู„ุชูˆู‚ูŠุนุงุช ุงู„ุฑู‚ู…ูŠุฉ. ุญุงูˆู„ุช ุฃู„ุง ุฃุชุนู…ู‚ ููŠ ุงู„ู†ุธุฑูŠุฉ ูˆุงู„ุชูุงุตูŠู„ ุŒ ูˆู„ูƒู† ุฃูƒุชุจ ูู‚ุท ู…ู‚ุฏู…ุฉ ุตุบูŠุฑุฉ ูˆู…ูˆุฌุฒุฉ ู„ู„ุณุคุงู„. ุจุงู„ู†ุณุจุฉ ู„ุฃูˆู„ุฆูƒ ุงู„ุฐูŠู† ูŠุนู…ู„ูˆู† ุจุงู„ูุนู„ ู…ุน EDS ุŒ ู…ู† ุบูŠุฑ ุงู„ู…ุฑุฌุญ ุฃู† ูŠูƒูˆู† ู‡ุฐุง ู…ุซูŠุฑู‹ุง ู„ู„ุงู‡ุชู…ุงู… ุŒ ูˆู„ูƒู† ุจุงู„ู†ุณุจุฉ ู„ู„ู…ุจุชุฏุฆูŠู† ุŒ ู„ู„ู…ุนุงุฑู ุงู„ุฃูˆู„ู‰ - ุตุญูŠุญ ุชู…ุงู…ู‹ุง.


ู…ุง ู‡ูˆ ุงู„ุชูˆู‚ูŠุน ุงู„ุฅู„ูƒุชุฑูˆู†ูŠ


ุฌู…ูŠุน ุงู„ู…ุตุทู„ุญุงุช ูˆุงู„ุชุนุฑูŠูุงุช ู…ู‚ุฏู…ุฉ ููŠ ุงู„ู‚ุงู†ูˆู† ุŒ ู„ุฐู„ูƒ ุŒ ุณู†ุฐูƒุฑ ูƒู„ ุดูŠุก ุŒ ูƒู…ุง ูŠู‚ูˆู„ูˆู† ุŒ ุจูƒู„ู…ุงุชูƒ ุงู„ุฎุงุตุฉ ุŒ ุฏูˆู† ุงู„ุชุธุงู‡ุฑ ุจุงู„ุฏู‚ุฉ ุงู„ู‚ุงู†ูˆู†ูŠุฉ ุงู„ู…ุทู„ู‚ุฉ ู„ู„ุตูŠุงุบุฉ.


ุงู„ุชูˆู‚ูŠุน ุงู„ุฑู‚ู…ูŠ ุงู„ุฅู„ูƒุชุฑูˆู†ูŠ (EDS) ู‡ูˆ ู…ุฌู…ูˆุนุฉ ู…ู† ุงู„ุฃุฏูˆุงุช ุงู„ุชูŠ ุชุฌุนู„ ู…ู† ุงู„ู…ู…ูƒู† ุงู„ุชุญู‚ู‚ ุจูˆุถูˆุญ ู…ู† ุฃู† ู…ุคู„ู ุงู„ู…ุณุชู†ุฏ (ุฃูˆ ู…ุคุฏูŠ ุงู„ุฅุฌุฑุงุก) ู‡ูˆ ุจุงู„ุถุจุท ุงู„ุดุฎุต ุงู„ุฐูŠ ูŠุทู„ู‚ ุนู„ู‰ ู†ูุณู‡ ุงุณู… ุงู„ู…ุคู„ู. ูˆุจู‡ุฐุง ุงู„ู…ุนู†ู‰ ุŒ ูุฅู† EDS ู…ู…ุงุซู„ ุชู…ุงู…ู‹ุง ู„ู„ุชูˆู‚ูŠุน ุงู„ุชู‚ู„ูŠุฏูŠ: ุฅุฐุง ูƒุงู†ุช ุงู„ูˆุซูŠู‚ุฉ "ุงู„ูˆุฑู‚ูŠุฉ" ุงู„ู…ุนุชุงุฏุฉ ุชุดูŠุฑ ุฅู„ู‰ ุฃู† ู…ุคู„ูู‡ุง ู‡ูˆ Ivanov ุŒ ูˆุชูˆู‚ูŠุน Petrov ุฃุฏู†ุงู‡ ุŒ ููŠู…ูƒู†ูƒ ุงู„ุดูƒ ููŠ ุชุฃู„ูŠู Ivanov.


ุงู„ุชูˆู‚ูŠุน ุงู„ุฅู„ูƒุชุฑูˆู†ูŠ ู‡ูˆ ุจุณูŠุท ูˆ ุชุนุฒูŠุฒ . ู„ุง ูŠุนู†ูŠ ุงู„ุชูˆู‚ูŠุน ุงู„ุจุณูŠุท ุงุณุชุฎุฏุงู… ุฎูˆุงุฑุฒู…ูŠุงุช ุงู„ุชุดููŠุฑ ุงู„ู‚ูŠุงุณูŠุฉ ุ› ุฌู…ูŠุน ุทุฑู‚ ุงู„ู…ุตุงุฏู‚ุฉ (ุชุฃุณูŠุณ ุงู„ุชุฃู„ูŠู) ุงู„ุชูŠ ุชู… ุงุฎุชุฑุงุนู‡ุง ู‚ุจู„ ุนุตุฑ EDS - ูˆู‡ุฐุง ููŠ ุงู„ุฃุณุงุณ ุชูˆู‚ูŠุน ุฅู„ูƒุชุฑูˆู†ูŠ ุจุณูŠุท. ุฅุฐุง ู‚ู…ุช ุŒ ุนู„ู‰ ุณุจูŠู„ ุงู„ู…ุซุงู„ ุŒ ุจุงู„ุชุณุฌูŠู„ ููŠ ู…ูˆู‚ุน ูˆูŠุจ ู„ู„ุฎุฏู…ุงุช ุงู„ุนุงู…ุฉ ุŒ ูˆุชุญู‚ู‚ ู…ู† ู‡ูˆูŠุชูƒ ู…ู† ุฎู„ุงู„ ุงู„ุธู‡ูˆุฑ ููŠ ู…ุฑูƒุฒ ู…ุชุนุฏุฏ ุงู„ูˆุธุงุฆู ุŒ ุซู… ุฅุฑุณุงู„ ู…ู†ุงุดุฏุงุช ุฅู„ู‰ ู‡ูŠุฆุงุช ุญูƒูˆู…ูŠุฉ ู…ุฎุชู„ูุฉ ู…ู† ุฎู„ุงู„ ู‡ุฐุง ุงู„ู…ูˆู‚ุน ุŒ ูุณูŠูƒูˆู† ุงุณู… ุงู„ู…ุณุชุฎุฏู… ูˆูƒู„ู…ุฉ ุงู„ู…ุฑูˆุฑ ู…ู† ู…ูˆู‚ุน ุงู„ุฎุฏู…ุงุช ุงู„ุนุงู…ุฉ ููŠ ู‡ุฐู‡ ุงู„ุญุงู„ุฉ ู‡ูˆ ุชูˆู‚ูŠุนูƒ ุงู„ุฅู„ูƒุชุฑูˆู†ูŠ ุงู„ุจุณูŠุท.


ุงู„ุชู‚ูŠุช ุฐุงุช ู…ุฑุฉ ุจู‡ุฐู‡ ุงู„ุทุฑูŠู‚ุฉ ู„ู…ุตุงุฏู‚ุฉ ุงู„ู…ุณุชู†ุฏุงุช ุงู„ุฅู„ูƒุชุฑูˆู†ูŠุฉ ููŠ ู…ู†ุธู…ุฉ ูˆุงุญุฏุฉ: ู‚ุจู„ ุฅุฑุณุงู„ ุงู„ูˆุซูŠู‚ุฉ ุŒ ุชู… ุฅุนุฏุงุฏ ุชุฌุฒุฆุฉ ู„ู‡ุง ( , ). ( ) , . , : , 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, .


, , , :


#!/usr/bin/python
# -*- coding: utf-8 -*-
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;
}

ู‡ุฐุง ุŒ ููŠ ุงู„ูˆุงู‚ุน ุŒ ูƒู„ ุดูŠุก. ุงู„ุขู† ุŒ ูˆูู‚ู‹ุง ู„ู„ุจู†ุฏ 5.23 ู…ู† GOST 7.0.97โ€“2016 ุŒ ูŠู…ูƒู†ูƒ ูˆุถุน ู‡ุฐู‡ ุงู„ุตูˆุฑุฉ ุงู„ุฌู…ูŠู„ุฉ ุนู„ู‰ ุงู„ู…ุณุชู†ุฏ (ููŠ ุงู„ู…ูƒุงู† ุงู„ุฐูŠ ูŠุฌุจ ุฃู† ูŠูƒูˆู† ููŠู‡ ุงู„ุชูˆู‚ูŠุน ุงู„ู…ูƒุชูˆุจ ุจุฎุท ุงู„ูŠุฏ):



All Articles