digitální podpis
7.5.15
vjj
1
příklad • C: \Program Files \Microsoft Office \Office15 \WinWord.exe
7.5.15
vjj
2
digitální podpis • C: \Program Files \Microsoft Office \Office15 \WinWord.exe
7.5.15
vjj
3
certifikát • C: \Program Files \Microsoft Office \Office15 \WinWord.exe
7.5.15
vjj
4
asymetrické šifrovací algoritmy •
autor privátní šifrovací klíč
•
veřejnost certifikát •
7.5.15
potvrzení, že v certifikátu uvedený veřejný šifrovací klíč a autorova identita patří k sobě
vjj
5
digitální podpis • • •
xxx = hash obsahu
•
hash obsahu =? dekódování yyy veřejným klíčem autora
7.5.15
yyy = zakódování xxx privátním klíčem
zzz = obsah + yyy + certifikát autora
vjj
6
proč digitální podpis •
záruka bezchybného a/nebo neškodného kódu - NE
•
autorská práva
- NE
•
záruka integrity obsahu
- ANO, ale...
•
záruka identity zdroje
- ANO, ale...
•
•
pokud se budete ptát lháře jestli lže, ...
ověření identity zdroje
•
pokud je certifikát vydán někým komu věříte
• •
• 7.5.15
- ANO
autor (důvěryhodný) certifikační autorita (důvěryhodná)
pokud jste si ověřili, že ten konkrétní certifikát skutečně vydal on vjj
7
digitálně podepsaný kód •
důležité jsou body s odpovědí ANO
•
jistota - že kód nebyl, od doby kdy ho (ověřený, tj. dohledatelný) autor (podpisu) podepsal, nikým a ničím pozměněn - pro právníky
•
jistota - pouze schválených aplikací - secure enterprise environment
•
důvěra - důvěřuji autorovi, že mi nepodstrčí zákeřný kód - pro (naivní) konzumenty
7.5.15
vjj
8
obsah certifikátu • • • • • •
účel – tj. k čemu lze používat příslušné klíče
•
to celé je digitálně podepsáno privátním klíčem vydavatele certifikátu
7.5.15
identita majitele certifikátu
identita vydavatele certifikátu platnost certifikátu (od kdy do kdy) "public key" majitele kde lze ověřit uvedené údaje
vjj
9
důvěra •
důvěryhodnost certifikátu ?
•
důvěryhodnost vydavatele certifikátu ?
•
způsob ověřování
7.5.15
vjj
10
Certifikační Autorita •
privátní
•
podniková
•
státní
•
7.5.15
• • • •
elektronické ID karty elektronické volby komunikace s úřady u nás CHYBÍ (?!?!?! Min. vnitra / NBÚ / BIS / ÚOOÚ )
komerční
•
akreditovaná státem
•
stát svěřuje důvěryhodnost své komunikace s občany a podniky do rukou soukromému provozovateli CA vjj
11
Certifikační Autorita •
komerční
•
Thawte Consulting
• •
•
VeriSign
• • •
•
founded in 1995 in 1999 VeriSign acquired Thawte in a stock purchase from Shuttleworth for US$575 million in 2000, Verisign acquired Network Solutions, which operated the .com, .net and .org gTLDs (generic top-level domain)
Symantec
•
7.5.15
certificate authority (CA) for X.509 certificates Thawte was founded in 1995 by Mark Shuttleworth in South Africa and was the second largest public CA on the Internet
In 2010, Verisign sold its authentication business unit to Symantec for $1.28 billion vjj
12
Certifikační Autorita •
akreditovaná
•
zákon o elektronickém (digitálním) podpisu (č. 227/2000 Sb, ... )
•
7.5.15
(pod dohledem ÚOOU)
komerční zájmy převládají nad zdravým rozumem
•
akreditovaná CA
•
kvalifikovaný certifikát
•
zaručený podpis
- I.CA, PostSignum, eIdentity
vjj
13
Timestamp Server •
http://timestamp.verisign.com/scripts/timestamp.dll
•
? offline ?
7.5.15
vjj
14
získání certifikátu •
•
uživatel
•
vygeneruje dvojici klíčů + certifikát - HOTOVO
• • •
vygeneruje jen dvojici klíčů privátní klíč do souboru .PVK nebo do CSP kontejneru připraví žádost o certifikát obsahující veřejný klíč
Certifikační autorita (program, instituce)
• •
• 7.5.15
ověří identitu uživatele vygeneruje a podepíše .CER
CA (software) je součást Windows serveru (od W2K) vjj
15
generování klíčů a certifikátu • Certificate Creation Tool:
makecert -sv
7.5.15
myPrivKey.pvk myCert.cer
vjj
16
typ souboru • •
*.spc – Software Publisher's Certificate *.pvk – odpovídající privátní klíč
• •
*.cer – DER encoded binary X.509 *.p7b – PKCS #7 Cryptographic Message Syntax Standard slouží k ukládání privátního klíče *.pfx – PKCS #12 Personal Information Exchange slouží k ukládání privátního klíče – chráněn heslem *.snk – Strong Name Key Personal Information Exchange slouží k ukládání privátního klíče
• • 7.5.15
vjj
17
privátní klíč • v souboru • •
*.pvk - bez hesla
*.p7b - s heslem
• v CSP kontejneru • • 7.5.15
registry smart card, USB token
vjj
18
CSP •
CSP – Crypto Services Provider – modul pro přístup ke kontejneru s šifrovacími klíči
•
CSP moduly pro přístup ke kontejnerům v registry jsou součástí Windows
•
CSP moduly pro přístup ke kontejnerům na čipových kartách a USB tokenech by měly být součástí driverů, protože bez nich nelze tato zařízení použít. Ale většinou jsou dodávány pouze jako součást placených balíků HW + "middleware". Součásti "middleware" bývají i nejjednodušší uživatelské utility. Často bývá "middleware" spolu s administrátorskými utilitami nedílnou součástí rozsáhlých balíků PKI softwaru s astronomickými cenami.
7.5.15
vjj
19
příklad PowerShell cd cert: dir
cd .\\CurrentUser ls
cd .\My dir | fl 7.5.15
vjj
20
příklad • MMC Certificates Current User + Local Computer
• Gemalto MiniDriver Manager
7.5.15
vjj
21
příklad EFS • EFS certifikát uživatele • EFS Recovery certifikát doménového administrátora
• PowerShell - cert: MMC - certificates PowerShell - cipher /C
7.5.15
vjj
22
samples • podepsaný mail •
Outlook | File | Options | Trust Center | Trust Center Settings…
• •
Trust Center | E-mail Security | Settings…
•
Outlook | Options | Permissions | Sign
Change Security Settings | Choose…
• podepsaný Office dokument • 7.5.15
Outlook | File | Info | Protect ... | Add a Digital Signature vjj
23
Signed Exe
7.5.15
vjj
24
7.5.15
vjj
25
signing
7.5.15
vjj
26
Signing Set Signer = CreateObject ("Scripting.Signer")
Signer.SignFile File, myCert.cer, "My"
7.5.15
vjj
27
Signing • co • • •
PE soubory (EXE, DLL, . . .),
ale i skripty, jakékoliv soubory
• jak • • • • 7.5.15
Visual Studio
utilita vlastní program skript vjj
28
příprava certifikátu • instalace klíče do kontejneru CSP •
rovnou během generování certifikátu
•
soubory s klíčem a certifikátem
•
-> token
•
•
-> registry
• • • 7.5.15
utilita, midleware
mmc.exe
snap-in Certificates, My user account Cerificates – Current User | Personal | Certificates Action | All Tasks | Import… vjj
29
Signing - 1. způsob •
Visual Studio
• •
.NET aplikace menu Project – Application Properties, záložka Signing
•
podepsat manifest pro distribuci pomocí ClickOnce • vytvoření testovacího certifikátu (PFX) • načtení existujícího souboru PFX (bez omezení) • použití certifikátu a klíčů z uživatelova CSP uložiště "My"
•
podepsat celou assembly pomocí Strong Name
• • •
7.5.15
existující soubor SNK existující soubor PFX (Bare Format – tj. bez jiných certifikátů a bez Extended Properties) New – wizard
• •
default je SNK– soubor obsahující privátní klíč nebude chráněn heslem explicitní zadání přípony PFX – wizard se zeptá na heslo vjj
30
Signing - 2. způsob •
SignTool.exe signwizard
•
Visual Studio SDK
\Program Files (x86)\Microsoft Visual Studio 8\SDK\v2.0\Bin už ne, ale VS obsahuje Windows SDK:
•
Windows SDK – jen "command line" verze C:\Program Files\Microsoft SDKs\Windows\v7.1A\Bin C:\Program Files (x86)\Windows Kits\8.0\bin\x64 i \x86 C:\Program Files (x86)\Windows Kits\8.1\bin\x64 i \x86 a \arm
•
WDK – už ne C:\WinDDK\7001\bin\SelfSign
7.5.15
vjj
46
7.5.15
vjj
47
7.5.15
vjj
48
7.5.15
vjj
49
Signing - 3. způsob signtool
sign /f myCert.pfx /p password myPgm.exe
signtool
Timestamp /t URL myPgm.exe
signtool
Verify /a
myPgm.exe 7.5.15
vjj
51
Signing - 4. způsob • VB script •
soubor s certifikátem k privátnímu klíči nainstalovaném na lokálním počítači
•
"My" - defaultní uložiště klíčů
Set Signer = CreateObject ("Scripting.Signer") Signer.SignFile File, myCert.cer, "My" 7.5.15
vjj
52
Signing - 4. způsob • Win32 API
LoadLibrary("Mssign32.dll");
... GetProcAddress("SignerSignEx"); ... GetProcAddress("SignerTimeStampEx"); ... GetProcAddress("WinVerifyTrust"); 7.5.15
vjj
53
Signing - 4. způsob • CAPICOM.dll • System.Security.Cryptography.Pkcs • SignedData object, SignedCode object SignedCode.Signer.Load ("pfx file", pswd) SignedCode.FileName = ... SignedCode.Sign(Signer) SignedCode.Timestamp(URL) SignedCode.Verify(true) 7.5.15
vjj
54
Signing - 5. způsob • PowerShell script •
"My" - defaultní uložiště klíčů
$file = "file fullname" $cert = @(dir cert:\CurrentUser\My -codesigning)[0] Set-AuthenticodeSignature $file $cert
7.5.15
vjj
55
PowerShell New-SelfSignedCertificate
Get-AuthenticodeSignature
Set-ExecutionPolicy
Get-ExecutionPolicy 7.5.15
vjj
56
Execution Policy
•
Restricted – nespustí žádný skript (default)
•
AllSigned – všechny skripty musí být podepsány • kontroluje digitální podpisy • zeptá se, zda je autor důvěryhodný (jednorázově x trvale)
•
RemoteSigned – jen remote skripty musí být podepsány • kontroluje digitální podpisy • zeptá se, zda je autor důvěryhodný (jednorázově x trvale)
• •
Unrestricted – nekontroluje podpisy Bypass
7.5.15
vjj
57
ověření podpisu • uživatel • Windows Explorer • File Properties | Digital Signatures • autor (web, tlf, osobně, ... )
• aplikace • Windows Explorer • platný certifikát 7.5.15
x
důvěryhodný majitel vjj
58
verification
7.5.15
vjj
59
limited set of CAs for Windows Driver Verification Policy
signtool
Verify /a myPgm.exe
>signtool.exe Verify
/a
testSigned.exe
SignTool Error: A certificate chain processed, but terminated in a root certificate which is not trusted by the trust provider. SignTool Error: File not valid: testSigned.exe
Number of errors: 1 7.5.15
vjj
60
Default Authentication Verification Policy
signtool
Verify /pa myPgm.exe
> signtool.exe Verify /pa testSigned.exe Successfully verified: testSigned.exe
7.5.15
vjj
61
X509 verification #using System.Security.Cryptography.X509Certificates; X509Certificate cert = CreateFromSignedFile( "filename" );
DWORD
Version;
DWORD
SerialNumber[4];
ALG_ID
SignatureAlgorithm;
FILETIME
ValidFrom;
FILETIME
ValidUntil;
PSTR
pszIssuer;
PSTR
pszSubject;
PctPublicKey *pPublicKey 7.5.15
vjj
63
X509 certificate #using System.Security.Cryptography.X509Certificates; X509Certificate cert = CreateFromCertFile( "filename" );
DWORD
Version;
DWORD
SerialNumber[4];
ALG_ID
SignatureAlgorithm;
FILETIME
ValidFrom;
FILETIME
ValidUntil;
PSTR
pszIssuer;
PSTR
pszSubject;
PctPublicKey *pPublicKey 7.5.15
vjj
64
je kód ze zcela spolehlivého zdroje ? je kód digitálně podepsaný ? je v certifikátu jako autor/distributor uveden někdo, komu důvěřuji ?
vydala certifikát (obecně/mně) důvěryhodná certifikační autorita nebo ho vygeneroval někdo, komu důvěřuju ?
kód není důvěryhodný
ověřím si přímo u vydavatele certifikátu (CA, autor,...), jestli je tento certifikát platný kód je důvěryhodný 7.5.15
vjj
65
paranoidní uživatel ? • •
•
7.5.15
bázlivý, vystrašený přehnané a nedoložené obavy o vlastní bezpečnost
důsledná podniková Bezpečnostní politika
vjj
66
PKCS • #1 • #3 • #5 • #6 • #7 • #8 • #10 • #11 • #12 • #13 • #14 • #15 7.5.15
public-key cryptography standards RSA Diffie-Hellman Password-based Encryption Extended-Certificate Syntax Cryptographic Message Syntax Private-Key Information Syntax Certification Request Cryptographic Token Interface Personal Information Exchange Elliptic Curve Cryptography Pseudo-random Number Generation Cryptographic Token Information Format vjj
67
osobnosti • Whitfield Diffie, Martin Hellman • Ronald Rivest, Adi Shamir, Len Adleman, • Ross Anderson
• Vlastimil Klíma, Tomáš Rosa • Petr Hanáček • Václav Matyáš • Pavel Vondruška 7.5.15
vjj
68