openeventdatabase / backend

code behind api.openeventdatabase.org
GNU Affero General Public License v3.0
43 stars 7 forks source link

Provenance des alertes alert.emergency #21

Open fladna9 opened 7 years ago

fladna9 commented 7 years ago

-- Fait en partie suite à #14 et #15 --

Bonjour, Impossible de trouver dans la doc comment sont générées les signatures des alertes emergency. Je me lance dans un projet open source basé sur votre API, et il manque quelques infos :

En tout cas, j'apprécie le travail effectué, les datas fournies sont vraiment sympathiques ;-)

PS : Un petit README avec un badge gitter https://gitter.im/ pourrait être sympathique pour vous contacter plutôt que de faire une "issue"... ;-)

Morendil commented 7 years ago

Salut et merci pour les retours!

Les mécanismes de signature des alertes ne sont pas encore définitifs, ce qui est implémenté actuellement est une solution qui a valeur de prototype dans le cadre de notre expérimentation avec la Préfecture de Police et Vélib'. L'application Vélib' embarque "en dur" une clé publique correspondant à une clé privée détenue par la PP, pour l'instant il n'y a pas de mécanisme pour répertorier ou révoquer des identités d'autre émetteurs.

On utilise JWT (JSON Web Token) pour générer une version signée de l'alerte, avec l'algo RS256 pour l'instant. (En fonction du support dans les libs iOS/Android on pourrait aussi envisager ES256.) Pour voir comment ça fonctionne tu peux consulter https://github.com/openeventdatabase/frontend/

Et nous n'avons aucun lien pour l'instant avec SAIP.

J'aimerais bien en savoir plus sur ton projet, tu peux m'écrire à l'adresse mail listée sur mon profil Github, je ferai suivre à @cquest

fladna9 commented 7 years ago

Bonjour @Morendil,

Je suis déjà en contact par mail avec @cquest ! Ok pour la signature, je suis en train de voir avec @cquest pour les clés publiques de la PP (et l'autorisation de les utiliser...). Le seul problème que j'ai avec ça, c'est que c'est que pour Paris. Pour SAIP, bien que cela ne soit pas publiquement documenté, j'ai à disposition une URL (stockée dans les paramètres de l'application sur mon téléphone) référençant un JSON des alertes. Par contre, je ne sais rien de la vérification des signatures. Je vais me pencher dessus (les algos doivent être des algos classiques, type RSA, ECDSA ou EdDSA).

Mon projet, en quelques mots, c'est un SAIP++, entièrement FOSS, écrit en Xamarin.Forms (cross platform possible Android, iOS, Windows Phone, Windows 10 UWA). Ainsi, il sera aisé pour quelqu'un de vérifier que la localisation ne sort pas du téléphone, voir même de la désactiver entièrement, par exemple. J'ai rédigé un truc rapidement, je suis en train de préparer le cahier des charges ->https://github.com/fladna9/alerte-citoyenne

Voilà voilà. :)

Morendil commented 7 years ago

Je ne pense pas que ça nécessite une autorisation: c'est une clé publique :) mais il est préférable de se coordonner pour être sûr d'avoir la bonne.

Pour SAIP je ne crois pas qu'il y ait de signature, cf. l'analyse de @dattaz: https://dattaz.fr/blog/apercu-de-lappli-saip-sous-le-capot.html

Bravo pour l'initative!

fladna9 commented 7 years ago

Effectivement pour SAIP

{
   "creation_date":1485866577428,
   "alerts":[
      {
         "id":"c6497861-1136-43d7-bcd4-3bf1cd3c05f0",
         "category":"attempt",
         "title":"TRIBUNAL MOULIN",
         "status":"closed",
         "severity":"alert",
         "start_time":1485852945370,
         "end_time":1485866577258,
         "area":{
            "type":"circle",
            "center":{
               "lat":46.568206,
               "lon":3.330696
            },
            "radius":1000
         },
         "insee_codes":[
            "03190",
            "03321"
         ],
         "department_codes":[ ],
         "version":3,
         "broadcast_time":1485866577022,
         "details":{
            "fr":"exercice - exercice - exercice\n- Fin de l'intervention des forces de l'ordre.\n- Pour vous informer restez à l'écoute des autorités et des médias.",
            "en":"exercise - exercise - exercise\n- End of intervention of the security forces.\n- Stay alert to and listen from the authorities and the media."
         },
         "share_urls":{
            "fr":"https://www.alerte-saip.gouv.fr/fr/c6497861-1136-43d7-bcd4-3bf1cd3c05f0_1485866577022.html",
            "en":"https://www.alerte-saip.gouv.fr/en/c6497861-1136-43d7-bcd4-3bf1cd3c05f0_1485866577022.html"
         }
      }
   ]
}

y a pas de signatures. :/ Et l'URL est bien https://3718fa66e6.optimicdn.com/alert_list.txt (trouvable avec un téléphone en root dans les paramètres de l'application sans décompilation (donc dans la légalité...).

ça commence à bien se profiler tout ça :)

cquest commented 7 years ago

Le flux JSON SAIP n'est effectivement pas signé et le certificat SSL du cdn utilisé n'est pas non plus spécifique à SAIP. Est-il au moins vérifié par l'appli ? Le code étant fermé, impossible à dire.

dattaz commented 7 years ago

Le flux JSON n'est pas signé mais le certificat si avec du pinning dans l'application (depuis la version de novembre 2016) : sha256/WGJkyYjx1QMdMe0UqlyOKXtydPDVrk7sl2fV+nNm1r4= pour 3718fa66e6.optimicdn.com

@fladna9 pour la question de la légalité, il existe une exception de décompilation dans le but d'interopérabilité cf Article L122-6-1 du Code de la Propriété Intellectuelle

fladna9 commented 7 years ago

Salut @dattaz ! Bravo pour ton boulot sur SAIP ! Merci pour l'info sur le cert pinning. Mais du coup, ils font du pinning sur un certificat Wildcard ? oO Vive la sécurité :/ Pour la décompilation, je connais cette exception mais je le ferai pas, sachant que je développe une application concurrente sous une autre licence, devant un tribunal, ça serait compliqué. ^_^