Listen to customers.
It improves everything...
even security!
@vixentael
Slide 44
Slide 44 text
III. The adventure
@vixentael
Slide 45
Slide 45 text
@vixentael
security
model
key/trust
scheme
encryption
scheme
cipher
suits
Slide 46
Slide 46 text
@vixentael
security
model
key/trust
scheme
encryption
scheme
cipher
suits
Slide 47
Slide 47 text
@vixentael
– real time analytics (user actions)
– servers load
– error logs
– user testing / user research
– open tickets / issues
Slide 48
Slide 48 text
@vixentael
– real time analytics (user actions)
– user testing / user research
– servers load
– open tickets / issues
– error logs
Slide 49
Slide 49 text
@vixentael
?
Slide 50
Slide 50 text
@vixentael
?
Slide 51
Slide 51 text
Bad Usability
→
Bad Security
@vixentael
Slide 52
Slide 52 text
@vixentael
Slide 53
Slide 53 text
Data Security
Assistance Program
@vixentael
business
model /
regulations
risks
to data
threat
model / attack
vectors
data
security
scheme
Slide 54
Slide 54 text
@vixentael
Analyze use-cases
Slide 55
Slide 55 text
Analyze use-cases
@vixentael
Hard to deploy Hard to support
Easy to misuse
Hard to verify
Slide 56
Slide 56 text
@vixentael
Slide 57
Slide 57 text
@vixentael
Deployment
Slide 58
Slide 58 text
@vixentael
Deployment
code
Multiple channels of distribution
Slide 59
Slide 59 text
@vixentael
Deployment
code
Multiple channels of distribution
Slide 60
Slide 60 text
@vixentael
Deployment
code
built packages (.pkg)
Multiple channels of distribution
Slide 61
Slide 61 text
@vixentael
Deployment
Multiple channels of distribution
code
built packages (.pkg) docker images
VM images
chef configuration
docker compose
Slide 62
Slide 62 text
@vixentael
Deployment
Slide 63
Slide 63 text
@vixentael
Deployment
1. Download, build, install every component
2. Generate keys / tokens for each component
3. Put keys into right folders (PK exchange)
5. Run components using correct config
4. Configure each component (port, keys)
Slide 64
Slide 64 text
2. Generate keys / tokens for each component
@vixentael
Deployment
1. Download, build, install every component
3. Put keys into right folders (PK exchange)
5. Run components using correct config
4. Configure each component (port, keys)
script
Slide 65
Slide 65 text
@vixentael
Deployment
1. Download, build, install every component
3. Put keys into right folders (PK exchange)
5. Run components using correct config
4. Configure each component (port, keys)
2. Generate keys / tokens for each component
script
Slide 66
Slide 66 text
@vixentael
Deployment
1. Download, build, install every component
3. Put keys into right folders (PK exchange)
5. Run components using correct config
4. Configure each component (port, keys) defaults
2. Generate keys / tokens for each component
script
Slide 67
Slide 67 text
@vixentael
Deployment
1. Download, build, install every component
3. Put keys into right folders (PK exchange)
5. Run components using correct config
4. Configure each component (port, keys)
one command!
2. Generate keys / tokens for each component
Slide 68
Slide 68 text
@vixentael
Deployment
Pre-baked configurations
docker-compose -f .yml up
Slide 69
Slide 69 text
@vixentael
Deployment
Pre-baked configurations
mysql-ssl-server-ssl.yml
MySQL <-SSL-> AServer <-SSL-> client
@vixentael
Deployment
Integration tests everywhere
– run on 12 OSs
– run on empty environments
– provide testing scripts for users
Slide 73
Slide 73 text
@vixentael
Integration
– logging formats (plaintext, json, CEF)
– infrastructure as a code (configs everywhere)
– event formats (unique event codes)
Good products do not exist in a vacuum
Slide 74
Slide 74 text
@vixentael
Slide 75
Slide 75 text
@vixentael
Secure by default
Slide 76
Slide 76 text
@vixentael
default strict parameters
pre-defined configuration files
make accidental changes unlikely
Secure by default
Slide 77
Slide 77 text
API design
Slide 78
Slide 78 text
API design
from pythemis.scell import SCellSeal
scell = SCellSeal(key)
encrypted_message = scell.encrypt(message, context)
message = scell.decrypt(encrypted_message, context)
github.com/cossacklabs @vixentael
Slide 79
Slide 79 text
easy to use
@vixentael
API design
unambiguous to use
2017.hack.lu/archive/2017/hacklu-crypto-api.pdf
&&
Slide 80
Slide 80 text
@vixentael
Naming
Slide 81
Slide 81 text
@vixentael
Naming
writer proxy server
database
Slide 82
Slide 82 text
db proxy
client app
@vixentael
Naming
writer proxy server
database
Slide 83
Slide 83 text
db proxy
client app
@vixentael
Naming
writer connector server
database
@vixentael
adopt faster
become less frustrated
make less mistakes
Slide 99
Slide 99 text
@vixentael
make user-facing decisions
iterate faster
plan better
become less frustrated
Slide 100
Slide 100 text
usable ≠ over-simplified
@vixentael
Slide 101
Slide 101 text
@vixentael
Slide 102
Slide 102 text
Home reading?
https://medium.com/@kshortridge/security-as-a-product-83a78c45ca27
Security as a Product
https://github.com/forter/security-101-for-saas-startups/blob/english/security.md
Organization security for startups
https://2017.hack.lu/archive/2017/hacklu-crypto-api.pdf
API design for cryptography
https://cr.yp.to/talks/2015.10.05/slides-djb-20151005-a4.pdf
Boring crypto, Daniel J. Bernstein
Slide 103
Slide 103 text
My other security slides
github.com/vixentael/
my-talks
Slide 104
Slide 104 text
@vixentael Product Engineer
Feel free to reach me with
security questions.
I do check my inbox :)