Lack of guest side encryption
Description
Notre implémentation ne comprend pas la capacité de sécuriser les évènement côté client contrairement à ce que préconise crowdnotifier.
Afin d'implémenter cela nous pouvons nous inspirer de l'implémentation de référence côté client de CrNo.
- Initialement, l'idée était de faire cette implémentation sans inclure l'encryption côté invité mais simplement en stockant la clé or, il semblerait que ça revienne presque au même puisque la vérification des clés revient à décrypter l'évènement. Ce qui veut dire que nous pouvons stocker l'évènement en clair étant donné que l'information est à disposition mais qu'il faut hasher l'information pour s'assurer lors de la récéption de la trace qu'elle soit bonne.
- Afin d'enregistrer une visite nous prendrons les informations de l'évènement stocké sous
content
oudata
dans les QR codes que nous générons ou dans ceux donné par CrNo qui changent en fonction des versions ainsi que le premier nonce donné normalement par le QR. - Nous hashons cette information utilisant sha256.
- Puis une nouvelle fois hashons le premier hash, le second nonce et le temps écoulé.
- Ce hash là sert d'identifiant.
- Nous stockons ensuite la clé publique
master public key
, l'id
, et toute autre donnée jugée pertinente comme par exemple le nom, emplacement ou date de l'évènement.
Dans l'implémentation de référence la libraire cryptographique herumi/mcl est utilisée pour déserilaiser la clé publique et gérer l'encryption asymétrique avec des courbes elliptiques sûrement parce qu'elle a été utilisée en amont pour la sérialiser... Cette librairie n'existe pas en dart
mais les alternatives suivantes peuvent être considérées:
- https://pub.dev/packages/crypton
- https://pub.dev/packages/pointycastle
- Il devrait aussi être possible d'utiliser directement la librairie mcl en passant à travers le code java compatible android.
- Finalement, nous pourrions utiliser la libraire originale en la compilant pour dart directement. Dans ces deux cas il faudrait écrire certains bindings pour les méthodes qui nous intéressent.