Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
digitální podpis
2.9.19 vjj 1
příklad
• C:\Program Files\Microsoft Office\Office15\WinWord.exe
2.9.19 vjj 2
digitální podpis
• C:\Program Files\Microsoft Office\Office15\WinWord.exe
2.9.19 vjj 3
certifikát
• C:\Program Files\Microsoft Office\Office15\WinWord.exe
2.9.19 vjj 4
test
• D:\Documents\SECURITY\testSigned.exe
2.9.19 vjj 5
asymetrické šifrovací algoritmy• autor
privátní šifrovací klíč
• veřejnost
certifikát• potvrzení, že v certifikátu uvedený
veřejný šifrovací klíč aautorova identitapatří k sobě
2.9.19 vjj 6
digitální podpis• odesilatel
• data
• xxx = hash( data )
• yyy = zakódování xxx privátním klíčem
• zzz = data + yyy + certifikát autora
• příjemce
• zzz = data + yyy + certifikát autora
• aaa = hash( data )
• bbb = dekódování yyy veřejným klíčem autora
• aaa =? bbb2.9.19 vjj 7
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 - ANO
• pokud je certifikát vydán někým komu věříte
• autor (důvěryhodný)
• certifikační autorita (důvěryhodná)
• pokud jste si ověřili, že ten konkrétní certifikát skutečně vydal on2.9.19 vjj 8
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
2.9.19 vjj 9
obsah certifikátu• účel – tj. k čemu lze používat příslušné klíče
• identita majitele certifikátu
• identita vydavatele certifikátu
• platnost certifikátu (od kdy do kdy)
• "public key" majitele
• kde lze ověřit uvedené údaje
• to celé je digitálně podepsáno privátním klíčem vydavatele certifikátu
2.9.19 vjj 10
důvěra• důvěryhodnost certifikátu ?
• důvěryhodnost vydavatele certifikátu ?
• způsob ověřování
2.9.19 vjj 11
Certifikační Autorita• privátní
• podniková
• státní• 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ého provozovatele CA
2.9.19 vjj 12
Certifikační Autorita• komerční
• Thawte Consulting
• 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
• VeriSign
• founded in 1995
• in 1999 VeriSign acquired Thawte in a stock purchase from Shuttleworthfor US$575 million
• in 2000, Verisign acquired Network Solutions, which operated the .com, .net and .org gTLDs (generic top-level domain)
• Symantec
• In 2010, Verisign sold its authentication business unit to Symantec for$1.28 billion
2.9.19 vjj 13
Certifikační Autorita• akreditovaná (pod dohledem ÚOOU)
• zákon o elektronickém (digitálním) podpisu (č. 227/2000 Sb, ... )
• komerční zájmy převládají nad zdravým rozumem
• akreditovaná CA - I.CA, PostSignum, eIdentity
• kvalifikovaný certifikát
• zaručený podpis
2.9.19 vjj 14
Timestamp Server• http://timestamp.verisign.com/scripts/timestamp.dll
• ? offline ?
2.9.19 vjj 15
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)
• ověří identitu uživatele
• vygeneruje a podepíše .CER
• CA (software) je součást Windows serveru (od W2K)
2.9.19 vjj 16
generování klíčů a certifikátu
makecert -sv myPrivKey.pvkmyCert.cer
• Certificate Creation Tool:
2.9.19 vjj 17
typ souboru• *.spc – Software Publisher's Certificate
• *.pvk – odpovídající privátní klíč
• *.cer – DER encoded binary X.509
• *.p7b – PKCS #7Cryptographic Message Syntax Standardslouží k ukládání privátního klíče
• *.pfx – PKCS #12Personal Information Exchangeslouží k ukládání privátního klíče – chráněn heslem
• *.snk – Strong Name KeyPersonal Information Exchangeslouží k ukládání privátního klíče
2.9.19 vjj 18
privátní klíč
• v souboru
• *.pvk - bez hesla
• *.snk - bez hesla
• *.p7b - s heslem
• *.pfx - s heslem
• v CSP kontejneru
• registry
• smart card, USB token
2.9.19 vjj 19
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.
2.9.19 vjj 20
příklad PowerShellcd cert:
dir
cd .\\CurrentUser
ls
cd .\My
dir | fl
2.9.19 vjj 21
příklad
• MMCCertificatesCurrent User + Local Computer
• Gemalto SafeNet Authentication Client
2.9.19 vjj 22
signing
2.9.19 vjj 23
Signing
Set Signer = CreateObject("Scripting.Signer")
Signer.SignFile File, myCert.cer, "My"
2.9.19 vjj 24
Signing• co
• exe, dll, ocx, cab, stl, cat
• ps1
• Office dokument
• jak
• Visual Studio
• utilita
• vlastní program
• skript
2.9.19 vjj 25
Signed Exe
2.9.19 vjj 26
2.9.19 vjj 27
1st method - file• EFS requirements• certifikát uživatele
• Recovery certifikát doménového administrátora
• check for certificates in the container• PowerShell namespace cert:
• MMC snap-in Certificates
• file encryption• Explorer - local menu
• prompt - cipher/C - displays information about encrypted files/E - encrypts/D - decrypts
2.9.19 vjj 28
2nd method - mail
• podepsaný mail
• Outlook | File | Options | Trust Center | Trust Center Settings…
• Trust Center | E-mail Security | Settings…
• Change Security Settings | Choose…
• Outlook | Options | Permissions | Sign
2.9.19 vjj 29
3rd method - document
• podepsaný Word dokument• File | Protect Document | Add a Digital Signature
2.9.19 vjj 30
příprava certifikátu
• instalace klíče do kontejneru CSP
• rovnou během generování certifikátu
• soubor s klíčem a certifikátem
• -> token
• utilita, midleware
• -> registry
• mmc.exe
• snap-in Certificates, My user account
• Cerificates – Current User | Personal | CertificatesAction | All Tasks | Import…
2.9.19 vjj 31
4th method - Visual Studio
• .NET aplikace
• menuProject – Application Properties,
záložkaSigning
2.9.19 vjj 32
Visual Studio - ClickOnce• podepsat manifest pro distribuci pomocí ClickOnce
• nejedná se o Authenticode, tj. nejde o ověření autora
• allows users to verify that any updates really originated from the publisher of the version they installed before
• certifikát
• 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"
• Timestamp server URL(http://timestamp.verisign.com/scripts/timestamp.dll)
2.9.19 vjj 33
Visual Studio - Strong Name• Strong Name pro celou assembly
• umožňuje nastavit specifická oprávnění pomocí CodeAccess Security
• strong name key file
• existující soubor SNK
• New – wizard• default je SNK
– soubor obsahující privátní klíč– není chráněn heslem
• konverze PFX na SNK včetně privátního klíčePFX2SNK.ps1
2.9.19 vjj 34
PFX2SNK.ps1Param( [Parameter(Mandatory=$True,Position=1)]
[string] $pfxFilePath,
[string] $pfxPassword )
# The path to the snk file we're creating
[string] $snkFilePath = [IO.Path]::GetFileNameWithoutExtension($pfxFilePath) + ".snk";
# Read in the bytes of the pfx file
[byte[]] $pfxBytes = Get-Content $pfxFilePath -Encoding Byte;
# Get a cert object from the pfx bytes with the private key marked as exportable
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2(
$pfxBytes, $pfxPassword,
[Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable);
# Export a CSP blob from the cert (which is the same format as an SNK file)
[byte[]] $snkBytes = ([Security.Cryptography.RSACryptoServiceProvider]$cert.PrivateKey).ExportCspBlob($true);
# Write the CSP blob/SNK bytes to the snk file
set-content $snkFilePath $snkBytes -encoding Byte
2.9.19 vjj 35
Strong Name• - kombinace jména souboru a veřejného klíče autora.
- veřejný klíč autora je vždy uložen v manifestu.
• "assembly" je digitálně podepsána(technologie "Microsoft Authenticode").
• je spočítána "hash" (algoritmus MDA5 nebo SHA-1) toho PE souboru, který obsahuje manifest,a výsledek je digitálně podepsán (algoritmus RSA) privátním klíčem autora. Tento výsledek je pak připojen na konec PE souboru s manifestem.
2.9.19 vjj 40
Strong Name• "Strong Name Utility" SN.exe
(Start Menu\Programs\Visual Studio ...\... Tools\Developer Command Prompt ... )
• vygenerování nového páru klíčů
• > sn –k myKeyPair.snk
• > sn –k myKeyPair.pfx
• uložení klíčů do CSP kontejneru
• > sn –i myKeyPair.snk "My"
• extrahování veřejného klíče
• > sn –p myKeyPair.snk myPublicKey.snk
• > sn –pc "My" myPublicKey.snk2.9.19 vjj 45
5th method - SignTool.exe• > 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\BinC:\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
2.9.19 vjj 50
2.9.19 vjj 51
2.9.19 vjj 52
2.9.19 vjj 53
6th method - SignTool.exesigntool sign
/f myCert.pfx
/p password
myPgm.exe
signtool Timestamp
/t URL
myPgm.exe
signtool Verify
/a
myPgm.exe
2.9.19 vjj 55
7th method - VB script
Set Signer = CreateObject("Scripting.Signer")
Signer.SignFile File, myCert.cer, "My"
• 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íčů
2.9.19 vjj 56
VB script
LoadLibrary("Mssign32.dll");
... GetProcAddress("SignerSignEx");
... GetProcAddress("SignerTimeStampEx");
... GetProcAddress("WinVerifyTrust");
• Win32 API
2.9.19 vjj 57
VB script
SignedCode.Signer.Load ("pfx file", pswd)
SignedCode.FileName = ...
SignedCode.Sign(Signer)
SignedCode.Timestamp(URL)
SignedCode.Verify(true)
• CAPICOM.dll
• System.Security.Cryptography.Pkcs
• SignedData object, SignedCode object
2.9.19 vjj 58
8th method - PowerShell
$file = "file fullname"
$cert = @(dir cert:\CurrentUser\My-codesigning)[0]
Set-AuthenticodeSignature $file $cert
• "My" - defaultní uložiště klíčů
• příklad
2.9.19 vjj 59
verification
2.9.19 vjj 62
ověření podpisu
• uživatel
• Windows Explorer
• File Properties | Digital Signatures
• autor (web, tlf, osobně, ... )
• aplikace
• Windows Explorer
• platný certifikát x důvěryhodný majitel
2.9.19 vjj 63
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
2.9.19 vjj 64
Default Authentication Verification Policy
signtool Verify
/pa
myPgm.exe
> signtool.exe Verify /pa testSigned.exe
Successfully verified: testSigned.exe
2.9.19 vjj 65
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
2.9.19 vjj 67
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
2.9.19 vjj 68
edit + sign / verify + run$filename = "D:\TEST\TestDigiPodpisu.ps1" # ?? proč ne TXT ??
notepad $fileName
Start-Sleep –Seconds 1
$processToWatch = get-process notepad
$processToWatch.WaitForExit()
$cert = @(dir cert:\CurrentUser\My -codesigning)[0]
Set-AuthenticodeSignature $fileName -cert $cert
$cert = Get-AuthenticodeSignature $fileName
[reflection.assembly]::LoadWithPartialName
("System.Management.Automation")
if ($cert.Status -eq "Valid") { &$fileName }
02.09.2019 vjj 69
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 ?
ověřím si přímo u vydavatele certifikátu (CA, autor,...), jestli je tento certifikát platný
kód je důvěryhodný
kód není důvěryhodný
2.9.19 vjj 70
kód jepodezřelý
paranoidní uživatel ?
• bázlivý, vystrašený
• přehnané a nedoložené obavy o vlastní bezpečnost
• důsledná podniková Bezpečnostní politika
2.9.19 vjj 71
PKCS public-key cryptography standards
• #1 RSA
• #3 Diffie-Hellman
• #5 Password-based Encryption
• #6 Extended-Certificate Syntax
• #7 Cryptographic Message Syntax
• #8 Private-Key Information Syntax
• #10 Certification Request
• #11 Cryptographic Token Interface
• #12 Personal Information Exchange
• #13 Elliptic Curve Cryptography
• #14 Pseudo-random Number Generation
• #15 Cryptographic Token Information Format
2.9.19 vjj 72
who-is-who• svět:
• Whitfield Diffie, Martin Hellman
• Ronald Rivest, Adi Shamir, Len Adleman,
• Ross Anderson
• ČR
• Vlastimil Klíma, Tomáš Rosa
• Petr Hanáček
• Václav "Vashek" Matyáš
• Pavel Vondruška2.9.19 vjj 73
DSM
• peer reviewed journal Data Security Management
• vydavatel: Tate Int., s.r.o.https://tate.cz/
• mezinárodní konference IS2Information Security Summit2019, 29.-30. května, Karolinum
2.9.19 vjj 74