58
digitální podpis 2.9.19 vjj 1

Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

digitální podpis

2.9.19 vjj 1

Page 2: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

příklad

• C:\Program Files\Microsoft Office\Office15\WinWord.exe

2.9.19 vjj 2

Page 3: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

digitální podpis

• C:\Program Files\Microsoft Office\Office15\WinWord.exe

2.9.19 vjj 3

Page 4: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

certifikát

• C:\Program Files\Microsoft Office\Office15\WinWord.exe

2.9.19 vjj 4

Page 5: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

test

• D:\Documents\SECURITY\testSigned.exe

2.9.19 vjj 5

Page 6: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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

Page 7: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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

Page 8: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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

Page 9: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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

Page 10: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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

Page 11: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

důvěra• důvěryhodnost certifikátu ?

• důvěryhodnost vydavatele certifikátu ?

• způsob ověřování

2.9.19 vjj 11

Page 12: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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

Page 13: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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

Page 14: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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

Page 15: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

Timestamp Server• http://timestamp.verisign.com/scripts/timestamp.dll

• ? offline ?

2.9.19 vjj 15

Page 16: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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

Page 17: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

generování klíčů a certifikátu

makecert -sv myPrivKey.pvkmyCert.cer

• Certificate Creation Tool:

2.9.19 vjj 17

Page 18: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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

Page 19: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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

Page 20: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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

Page 21: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

příklad PowerShellcd cert:

dir

cd .\\CurrentUser

ls

cd .\My

dir | fl

2.9.19 vjj 21

Page 22: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

příklad

• MMCCertificatesCurrent User + Local Computer

• Gemalto SafeNet Authentication Client

2.9.19 vjj 22

Page 23: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

signing

2.9.19 vjj 23

Page 24: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

Signing

Set Signer = CreateObject("Scripting.Signer")

Signer.SignFile File, myCert.cer, "My"

2.9.19 vjj 24

Page 25: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

Signing• co

• exe, dll, ocx, cab, stl, cat

• ps1

• Office dokument

• e-mail

• jak

• Visual Studio

• utilita

• vlastní program

• skript

2.9.19 vjj 25

Page 26: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

Signed Exe

2.9.19 vjj 26

Page 27: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

2.9.19 vjj 27

Page 28: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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

Page 29: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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

Page 30: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

3rd method - document

• podepsaný Word dokument• File | Protect Document | Add a Digital Signature

2.9.19 vjj 30

Page 31: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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

Page 32: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

4th method - Visual Studio

• .NET aplikace

• menuProject – Application Properties,

záložkaSigning

2.9.19 vjj 32

Page 33: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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

Page 34: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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

Page 35: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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

Page 36: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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

Page 37: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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

Page 38: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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

Page 39: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

2.9.19 vjj 51

Page 40: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

2.9.19 vjj 52

Page 41: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

2.9.19 vjj 53

Page 42: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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

Page 43: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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

Page 44: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

VB script

LoadLibrary("Mssign32.dll");

... GetProcAddress("SignerSignEx");

... GetProcAddress("SignerTimeStampEx");

... GetProcAddress("WinVerifyTrust");

• Win32 API

2.9.19 vjj 57

Page 45: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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

Page 46: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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

Page 47: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

verification

2.9.19 vjj 62

Page 48: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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

Page 49: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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

Page 50: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

Default Authentication Verification Policy

signtool Verify

/pa

myPgm.exe

> signtool.exe Verify /pa testSigned.exe

Successfully verified: testSigned.exe

2.9.19 vjj 65

Page 51: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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

Page 52: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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

Page 53: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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

Page 54: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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ý

Page 55: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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

Page 56: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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

Page 57: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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

Page 58: Bezpečnost Windows pro programátory digitalni podpis.pdf · 2019. 9. 2. · CSP • CSP –Crypto Services Provider –modul pro přístup ke kontejneru s šifrovacími klíči

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