Privacy by Design

De l'autonomie de l'individu sur ses données personnelles

@m4d_z
alwaysdata
Le biais de gratuité

La Privacy, on en est où ?

Des grosses boîtes
qui pompent des données

Des petites boîtes
qui pompent des données et n’en ont pas conscience

Des startups
qui pompent des données pour faire comme les grands

Des données pas vraiment volées

Cambridge Analytica, 2016, campagne présidentielle US

Vie privée, pour l’utilisateur•trice

  • Donner trop de pouvoir rend les choses trop complexes
  • Illusionner sur une protection parfaite est contre-productif
  • Tout le monde s’en fout

I call this device a Personal Information Telecommunication Agent, or Pita for short. The acronym also stand for Pain In The Ass, which it is equally likely to be, because having all that connectivity is going to destroy what’s left of everyone’s privacy.

David Gerrold, in Sm@rt Reseller, « future of computing » prediction, 1999

Conception Privacy by Design

Préquelle : Accountability pattern

  • Début des années 80
  • Ensemble de procédures (ISO27001, etc)
  • Démontre la conformité aux règles de gestion
  • Crée les responsables de la sécurité des SI
  • Rapporte les preuves
Accountability pattern ne s'applique qu'à posteriori

Privacy by Design

1995, A New Hope

7 Laws of Identity

  1. Proactive not reactive; Preventative not remedial
  2. Privacy as the default setting
  3. Privacy embedded into design
  4. Full functionality – positive-sum, not zero-sum
  5. End-to-end security – full lifecycle protection
  6. Visibility and transparency – keep it open
  7. Respect for user privacy – keep it user-centric

PET, nouveaux animaux outils de compagnie

  • Chiffrement
  • Gestion des métadonnées et des permissions
  • Vérification légale intégrées au code
  • Gouvernance des données
  • Gestion des identités

En pratique

Lors de la conception

  • Concevez des check-list impliquant toutes les enjeux de données
  • Assurez-vous que tous les intervenant•e•s sont sensibilisé•e•s
  • Ne demandez pas plus de permissions que nécessaire
  • Auditez, testez, pen testez !

Implémentation

  • Chaque feature valide la check-list, en tests automatisés
  • Les jeux de tests ne viennent pas de la prod !
  • Oubliez les frameworks de permissions tous prêts
  • Tests fonctionnels sur des environnements multiples

Checklists

GDPRChecklist.io

Permissions


Lors de l’éxécution

  • Minimisez la collecte de données
  • Minimisez les données échangées avec les services tiers
  • Pseudonimisez la donnée
  • Vérifiez les formulaires (contact, login, assistance…)
  • Supprimez régulièrement la donnée collectée

Implémentation

  • Utilisez des services de gestion d’identités
  • Hashez / chiffrez / tokenizez les entrées
  • Permutez, substituez, segmentez les données sensibles
  • Faites passer des cron !

OpenID

export middleware = (next, action, userManager) => {
  if (!storedUser || storedUser.expired) {
    next(loadingUser())
    userManager.getUser()
      .then(getUserCallback)
      .catch(errorCallback)
  }

  return next(action)
}

RSA Signature

const encrypt = new JSEncrypt()
encrypt.setPrivateKey(privkey))
let signature = encrypt.sign(message, CryptoJS.SHA256, 'sha256')

const decrypt = new JSEncrypt()
decrypt.setPublicKey(pubkey)
let verified = decrypt.verify(message, signature, CryptoJS.SHA256)

return verified? 'It Works!' : 'Error with signature'

RSA Encryption

const encrypt = new JSEncrypt()
encrypt.setPublicKey(pubkey))
let ciphertext = encrypt.encrypt(message)

const decrypt = new JSEncrypt()
decrypt.setPrivateKey(privkey)
let plaintext = decrypt.decrypt(ciphertext)

return plaintext == message ? 'It Works!' : 'Error with decryption'

Libs crypto dans le navigateur

  • jsencrypt
  • js-nacl
  • jwcrypto

À l’expérience utilisateur•trice

  • Founissez des réglages simples et des notices claires à valider
  • N’exigez pas de passer par des services externes
  • Pas de partage sur les réseaux par défaut
  • Séparez les consentements (shared data vs. analytics)

Implémentation

  • Utilisez les frameworks de notification
  • Évitez les réseaux sociaux pour la couche ID
  • Pas de jsSocials
  • Utilisez des outils de trace d’usages respecteux

SweetAlert

swal("A wild Pikachu appeared! What do you want to do?", {
  buttons: {
    catch: { text: "Throw Pokéball!", value: "catch" },
    defeat: true
  }
}).then(value => {
  switch (value) {
    case "defeat": swal("Pikachu fainted! You gained 500XP!"); break
    case "catch": swal("Gotcha!", "Pikachu was caught!", "success"); break
  }
})
SweetAlert preview
SweetAlert using a template
  • configurable
  • chainable
  • promises
  • compatible frameworks composants
Track mobile apps usage

En fin de cycle

  • Rappelez aux utilisateurs·trices leur droit d’accès aux données
  • Facilitez l’export
  • Supprimez les données des comptes supprimés
  • Supprimez les données à la fermeture du service

Implémentation

  • Mettez en place des APIs documentées (Swagger, Apiary…) et utilisables
  • Utilisez des formats de données ouverts (XML, JSON…)
  • rm -rf /

Stream Large Objects

oboe('/myapp/things.json')
  .node('foods.*', foodThing => { log( 'Go eat some', foodThing.name) })
  .node('badThings.*', badThing => { log( 'Stay away from' badThing.name) })
  .done(things => {
    log(`
      there are ${things.foods.length} things to eat
      and ${things.nonFoods.length} to avoid
    `)
  })

GraphQL

const { graphql, buildSchema } = require('graphql')
const schema = buildSchema(`
  type Query { hello: String }
`)
const root = { hello: () => 'Hello World!' }

graphql(schema, '{ hello }', root)
  .then(response => {
    log(response)
  })
GraphiQL

Guidelines

OWASP: Top 10 Privacy Risks

  1. Web Application Vulnerabilities
  2. Operator-sided Data Leakage
  3. Insufficient Data Breach Response
  4. Insufficient Deletion of personal data
  5. Non-transparent Policies, Terms and Conditions
  6. Collection of data not required for the primary purpose
  7. Sharing of data with third party
  8. Outdated personal data
  9. Missing or Insufficient Session Expiration
  10. Insecure Data Transfer

Tracer la donnée, pas les utilisateurs·trices

Gérer les identités

Pseudonimisation & analyse de données

Differential Privacy

Penser la vie privée autrement

La Privacy By Design est complètement aux antipodes de la souveraineté numérique des individus : on fait sans les individus, on protège la vie privée sans définir ce que c’est.

Fabrice Rochelandet. Souveraineté numérique et modèle d’affaires. In: Numérique, reprendre le contrôle. Framasoft: 2016, p.65

Privacy By Default

  • assure qu’un minimum de données est en jeu
  • simplifie le processus pour les utilisateurs·trices
  • évite les difficultés dans les réglages de confidentialité
  • force idéalement le niveau de protection maximal par défaut

Chacun•e se doit
d’alerter

Code is Law

Les développeurs•euses sont politiques

Publicness is value. This is an argument I’ll make that what’s public is owned by the public — whether that’s governments’ actions or images taken in public space — and whenever that is diminished, it robs from us, the public.

Jeff Jarvis - Privacy and Publicness and the power behind it - Youtube, 2011

Privacy by Using

  • Sensibiliser les usages
  • Lancer les alertes
  • Agir chacun•e à son niveau

Nul ne sera l’objet d’immixtions arbitraires dans sa vie privée, sa famille, son domicile ou sa correspondance, ni d’atteintes à son honneur et à sa réputation. Toute personne a droit à la protection de la loi contre de telles immixtions ou de telles atteintes.

Déclaration universelle des droits de l’homme. Article 12, 1948

m4dz's avatar
m4dz

Paranoïd Web Dino · Tech Evangelist

alwaysdata logo
https://www.alwaysdata.com

Questions?

Illustrations

m4dz, CC BY-SA 4.0

Interleaf images

Courtesy of Unsplash and Pexels contributors

Icons

  • Layout icons are from Entypo+
  • Content icons are from FontAwesome

Fonts

  • Cover Title: Sinzano
  • Titles: Argentoratum
  • Body: Mohave
  • Code: Fira Code

Tools

Powered by Reveal.js

Source code available at
https://git.madslab.net/talks