Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 69 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,21 +1,84 @@
# OpenStopCovid
## Solution de contact tracing décentralisée, 100 % libre et issue de la société civile
**100% Open Source contact tracing application, powered by contributors and fueled by community.**

## Pour faire tourner ce site en local
## To add a new language
### 1. Copy the folder default to [my-two-letters-language-code]
[Pick the code here](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)
```
cp -r default [my-two-letters-language-code]

Example:
cp -r default en
```
### 2. Translate everything in [my-two-letters-language-code]
### 3. Add the[my-two-letters-language-code] to the array `langs` in `_config`
```
vim _config
# initial array
langs = [fr, en]
# new array
langs = [fr, en, my-two-letters-language-code]
```
### You're done

## To run this site locally ##
```
git clone https://github.com/OpenStopCovid/openstopcovid.github.io.git
cd openstopcovid.github.io
git checkout fr # optionnel: sélectionnez une branche existante (fr, en ou master)
git checkout fr # optional: select an existing branch (fr, en, or master)
bundle install
bundle exec jekyll serve
# connectez votre navigateur à l'adresse: [http://localhost:4000](http://localhost:4000)
# connect your browser to the address: [http://localhost:4000]
```

## Pour construire un docker en local
## To build a local docker
```
git clone https://github.com/OpenStopCovid/openstopcovid.github.io.git
cd openstopcovid.github.io
docker build . --tag openstopcovid
docker run -p 80:4000 openstopcovid
# connectez votre navigateur à l'adresse: [http://0.0.0.0:80](http://0.0.0.0)
# connect your browser to the address: [http://0.0.0.0:80](http://0.0.0.0)
```

![OpenStopCovid](./logo.png)

# OpenStopCovid

Mobile tracing apps have a potential to support our efforts to limit the spread of COVID-19 and to keep some semblance of normality despite containment/preventive measures:
* people can be quickly informed that they may have been in contact with an infected person
* people can receive instructions on which further actions to take from public health authorities
* epidemiologists could receive anonymous or pseudonymous research information about the spread from volunteering users

## Disclaimer

Contact tracing technology using mobile applications is under active investigation and development for deployment by different countries. However, it has never been tested at a wide scale and its effectiveness is controversial. As stated by our Open Source licence please note that the software is thus provided "as is", without warranty of any kind. Would you want to deploy your own instance please ensure it complies with the applicable laws or required certifications in your country, state or province.

## Why OpenStopcovid ?

Different initiatives have been taken to tackle the underlying technical difficulties of contact tracing:
* the use of Bluetooth LE (Low Energy) for proximity detection of nearby mobile phones;
* privacy-preserving - personal data should be securely encrypted and dismantled as soon as no longer needed.

The most famous being [BlueTrace](https://bluetrace.io/) by the Singaporean Government, or [DP-3T](https://github.com/DP-3T/documents) and [ROBERT](https://github.com/ROBERT-proximity-tracing/documents) from the Pan-European Privacy-Preserving Proximity Tracing (PEPP-PT) project.

Although all procols have been publicly published, only BlueTrace proposes an Open Source [reference implementation](https://github.com/OpenTrace-community). However, it was published before Google and Apple jointly announced a [framework](https://www.apple.com/covid19/contacttracing) to support contact tracing apps. Moreover, it is thightly coupled to a specific Cloud Provider and we believe that a universal solution should be cloud-agnostic as much as possible.

So far no reference implementation has been published for ROBERT. Moreover, the choice of a centralized approach makes it hardly compatible with the contact tracing framework of Google and Apple. Indeed, Bluetooth tracking on mobile devices requires privileged access to the system in order to work efficiently.

As a consequence, we selected the decentralized [DP-3T](https://github.com/DP-3T/documents) approach as the underlying technology to provide our reference implementation. Currently it is based on the Design 1, which is less complex and more pluggable to the contact tracing framework.

We strongly believe that an easy-to-install, cloud-agnostic, 100% Open Source application is mandatory to increase trust and allow large scale deployment at the level of what is at stake. However, we are also convinced that this technology should only be one piece in the puzzle of the investigative work and keeping human-in-the-loop is important. Contact tracing is inherently "invasive", whatever the technical measures in place to protect against deanonymisation, so the key to protect privacy as much as possible is also in the operational processes, the governance and oversight of the authorities conducting it.

## What's inside ?

The global architecture is depicted by the following diagram:

![Architecture](./architecture.png)

The main components of OpenStopCovid are the following:
* [Backend microservices](https://github.com/OpenStopCovid/dp3t-ms)
* `exposed-keys` microservice to publish exposed keys and get a list of exposed keys
* `codes` microservice to create and use validation codes to declare sick patients
* [User interface for physicians](https://github.com/OpenStopCovid/health-authority-ui) in order to generate validation codes for sick patients
* [Android application]() relying on [DP-3T SDK](https://github.com/DP-3T/dp3t-sdk-android) for end-users
* [iOS application]() relying on [DP-3T SDK](https://github.com/DP-3T/dp3t-sdk-ios) for end-users
22 changes: 13 additions & 9 deletions _config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,22 @@ description:
# Your name to show in the footer
author: OpenStopCovid

# Languages
langs: [fr]


# --- List of links in the navigation bar --- #

navbar-links:
A propos: "aboutus"
Resources:
- Application mobile: "https://github.com/OpenStopCovid/app"
- Interface médecin: "https://pro-sante.openstopcovid.fr/#home"
- Interface médecin-code: "https://github.com/OpenStopCovid/health-authority-ui"
- Serveur de l'application: "https://github.com/OpenStopCovid/dp3t-ms"
- Specifications: "https://github.com/DP-3T/documents/blob/master/DP3T%20White%20Paper.pdf"
- Documentation: "https://github.com/DP-3T/documents"
Press Kit: "presskit"
about: "aboutus"
ressources:
- appmobile: "https://github.com/OpenStopCovid/app"
- uidoctor: "https://pro-sante.openstopcovid.fr/#home"
- uidoctordev: "https://github.com/OpenStopCovid/health-authority-ui"
- appserv: "https://github.com/OpenStopCovid/dp3t-ms"
- specs: "https://github.com/DP-3T/documents/blob/master/DP3T%20White%20Paper.pdf"
- doc: "https://github.com/DP-3T/documents"
presskit: "presskit"

# --- Local development options ---

Expand Down
62 changes: 3 additions & 59 deletions _includes/header.html
Original file line number Diff line number Diff line change
@@ -1,66 +1,15 @@
<!-- TODO this file has become a mess, refactor it -->

{% assign date_format = site.date_format | default: "%B %-d, %Y" %}

{% if page.bigimg or page.title %}

{% if page.bigimg %}
<div id="header-big-imgs" data-num-img={% if page.bigimg.first %}{{ page.bigimg.size }}{% else %}1{% endif %}
{% for bigimg in page.bigimg %}
{% assign imgnum = forloop.index %}
{% for imginfo in bigimg %}
{% if imginfo[0] %}
data-img-src-{{ imgnum }}="{{ imginfo[0] | relative_url }}"
data-img-desc-{{ imgnum }}="{{ imginfo[1] }}"
{% else %}
data-img-src-{{ imgnum }}="{{ imginfo | relative_url }}"
{% endif %}
{% endfor %}
{% endfor %}
></div>
{% endif %}

<header class="header-section {% if page.bigimg %}has-img{% endif %}">
{% if page.bigimg %}
<div class="big-img intro-header">
<div class="container">
<div class="row">
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
<div class="{{ include.type }}-heading">
<h1>{% if page.title %}{{ page.title }}{% else %}<br/>{% endif %}</h1>
{% if page.subtitle %}
{% if include.type == "page" %}
<hr class="small">
<span class="{{ include.type }}-subheading">{{ page.subtitle }}</span>
{% else %}
<h2 class="{{ include.type }}-subheading">{{ page.subtitle }}</h2>
{% endif %}
{% endif %}

{% if include.type == "post" %}
<span class="post-meta">Posted on {{ page.date | date: date_format }}</span>
{% endif %}
</div>
</div>
</div>
</div>
<span class='img-desc'></span>
</div>
{% endif %}
<div class="intro-header no-img">
<div class="container">
<div class="row">
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
<div class="{{ include.type }}-heading">
<h1>{% if page.title %}{{ page.title }}{% else %}<br/>{% endif %}</h1>
{% if page.subtitle %}
{% if include.type == "page" %}
<hr class="small">
<span class="{{ include.type }}-subheading">{{ page.subtitle }}</span>
{% else %}
<h2 class="{{ include.type }}-subheading">{{ page.subtitle }}</h2>
{% endif %}
{% endif %}
<h1>{{ page.title }}</h1>
<hr class="small">
<span class="{{ include.type }}-subheading">{{ page.subtitle }}</span>

{% if include.type == "post" %}
<span class="post-meta">Posted on {{ page.date | date: date_format }}</span>
Expand All @@ -71,8 +20,3 @@ <h2 class="{{ include.type }}-subheading">{{ page.subtitle }}</h2>
</div>
</div>
</header>


{% else %}
<div class="intro-header"></div>
{% endif %}
16 changes: 13 additions & 3 deletions _includes/nav.html
Original file line number Diff line number Diff line change
Expand Up @@ -16,20 +16,30 @@

<div class="collapse navbar-collapse" id="main-navbar">
<ul class="nav navbar-nav navbar-right">

{% assign locale = page.url | replace:'/',' ' | truncatewords: 1,"" %}

{%- for link in site.navbar-links -%}
{%- if link[1].first %}

<li class="navlinks-container">
<a class="navlinks-parent" href="javascript:void(0)">{{ link[0] }}</a>
{% assign key = link[0] %}
<!--a class="navlinks-parent" href="javascript:void(0)">{{ page[key] }}</a-->
<a href="javascript:void(0)">{{ page[key] }}</a>
<div class="navlinks-children">
{%- for childlink in link[1] -%}
{%- for linkparts in childlink %}
<a href="{{ linkparts[1] | relative_url }}">{{ linkparts[0] }}</a>
{% assign key = linkparts[0] %}
{%- if page[key] %}
<a href="{{ linkparts[1] | relative_url }}">{{ page[key] }}</a>
{%- endif -%}
{%- endfor -%}
{%- endfor %}
</div>
</li>
{% else %}
<li><a href="{{ link[1] | relative_url }}">{{ link[0] }}</a></li>
{% assign key = link[0] %}
<li><a href="{{ locale | append:'/' | append:link[1] | relative_url }}">{{ page[key] }}</a></li>
{%- endif -%}
{%- endfor -%}
</ul>
Expand Down
7 changes: 0 additions & 7 deletions aboutus.md

This file was deleted.

17 changes: 16 additions & 1 deletion _includes/openstopcovid.md → default/index.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,18 @@
---
layout: page
title: OpenStopCovid
subtitle: Solution de contact tracing décentralisée<br>100 % libre et issue de la société civile
ressources: Ressources
presskit: Press kit
appmobile: Application mobile
uidoctor: Application médicale
uidoctordev: Application médicale (code)
appserv: Serveur de l'application
specs: Specifications
doc: Documentation
lang: default
---

## Qu’est-ce que le contact tracing

Le traçage numérique des contacts consiste, pour un utilisateur, à installer une application smartphone spécifique qui, à l’aide de la technologie Bluetooth, repère les autres appareils à proximité. En pratique, le téléphone enregistre en mémoire des pseudonymes que les autres appareils diffusent autour d’eux. Le plus souvent chiffrés, ces pseudonymes ne peuvent être compris que par des smartphones équipés de la même application.
Expand Down Expand Up @@ -38,7 +53,7 @@ Les principales composantes du projet sont les suivantes :

L’architecture que nous avons retenue s’appuie directement sur le protocole DP-3T, et utilise plusieurs composants de référence. Notre implémentation est représentée par le schéma suivant :

![Architecture](img/architecture.png)
![Architecture]({{site.url}}/img/architecture.png)

## Comment contribuer

Expand Down
10 changes: 9 additions & 1 deletion presskit.md → default/presskit.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,17 @@
layout: page
title: Press Kit
subtitle: OpenStopCovid
ressources: Ressources
presskit: Press kit
appmobile: Application mobile
uidoctor: Application médicale
uidoctordev: Application médicale (code)
appserv: Serveur de l'application
specs: Specifications
doc: Documentation
lang: default
---


## Application mobile pour les utilisateurs
![OpenStopCovid](/img/mobile-app/App Protocole D3PT V0-16.png)
![OpenStopCovid](/img/mobile-app/App Protocole D3PT V0-17.png)
Expand Down
15 changes: 15 additions & 0 deletions _includes/timeline.html → fr/aboutus.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,18 @@
---
title: About us
subtitle: Our history
about: A propos
ressources: Ressources
presskit: Press kit
appmobile: Application mobile
uidoctor: Application médicale
uidoctordev: Application médicale (code)
appserv: Serveur de l'application
specs: Specifications
doc: Documentation
lang: fr
---

<style>
ul.timeline {
list-style-type: none;
Expand Down
64 changes: 64 additions & 0 deletions fr/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
---
title: OpenStopCovid
subtitle: Solution de contact tracing décentralisée<br>100 % libre et issue de la société civile
about: A propos
ressources: Ressources
presskit: Press kit
appmobile: Application mobile
uidoctor: Application médicale
uidoctordev: Application médicale (code)
appserv: Serveur de l'application
specs: Specifications
doc: Documentation
lang: fr
---

## Qu’est-ce que le contact tracing

Le traçage numérique des contacts consiste, pour un utilisateur, à installer une application smartphone spécifique qui, à l’aide de la technologie Bluetooth, repère les autres appareils à proximité. En pratique, le téléphone enregistre en mémoire des pseudonymes que les autres appareils diffusent autour d’eux. Le plus souvent chiffrés, ces pseudonymes ne peuvent être compris que par des smartphones équipés de la même application.

Cette technologie possède le potentiel ([sans certitude toutefois](https://github.com/DP-3T/documents/issues/224)) de limiter la propagation de la maladie Covid-19 au sein de la population. Ainsi, une application mobile dédiée, développée dans les règles de l’art, pourrait nous permettre de renouer avec un semblant de vie normale, sans pour autant mettre à mal les résultats du confinement qui s’achève. Citons trois avantages à attendre d’une application de traçage :
* Une personne pourra être rapidement informée lorsqu’elle se sera tenue trop longtemps à proximité d’une personne contaminée.
* Une personne pourra recevoir automatiquement des instructions, de la part des autorités de santé publique, sur les mesures à prendre.
* Une personne pourra, sur une base volontaire, partager avec les épidémiologistes des informations de recherche anonymes en rapport avec la propagation de la maladie sur le territoire.

Pour autant, le traçage numérique ne saurait être une solution à elle seule contre la pandémie. Il ne peut que participer à un dispositif plus large.

## Pourquoi une solution décentralisée

Lorsqu’un utilisateur est diagnostiqué positif, il est possible de calculer le risque encouru par toutes les personnes croisées récemment par cet utilisateur. Afin de réaliser cette opération, il faut recueillir l’état de santé de la victime, la date correspondant à l’apparition des symptômes et tous les pseudonymes que son smartphone a émis au cours des jours précédents pour s’identifier auprès des autres utilisateurs. En parallèle, il faut également recueillir les pseudonymes que son smartphone a reçu, de la part des autres utilisateurs, pendant la phase d’incubation de la maladie. En combinant ces données une application de traçage peut déterminer le niveau de risque d’exposition de chaque personne.

Le problème ici est moins de savoir comment réaliser ce calcul que de déterminer où il se déroule et quelles sont les données transmises. En se basant sur le protocole DP-3T, conçu par l’École polytechnique fédérale de Lausanne ([EPFL](https://www.epfl.ch/fr/)) et ses partenaires, OpenStopCovid a choisie d’adopter une réponse décentralisée à ce problème. Cela signifie que le calcul se déroule dans le smartphone des utilisateurs et que les contacts n’en sortent pas. À l’inverse, une solution centralisée consiste nécessairement à envoyer ses contacts pseudonymisés à un serveur distant, une condition préalable à la réalisation des traitements qui à nos yeux est inacceptable.

Nous pensons qu'il est trop risqué de réunir des données de cet ordre dans un serveur central, aussi sécurisé soit-il. Vu les évolutions de l'informatique, ces données anonymes aujourd'hui ne le seront peut-être plus demain. En outre, se pose le risque de centralisation, d’enregistrement et croisement de ces informations avec d'autres informations telles que, par exemple, les journaux systèmes des opérateurs Télécom. L’approche décentralisée comporte elle-aussi des risques, mais ces derniers restent localisés, et donc minimisés, à l’échelle d’un individu. Ces risques sont comparables à celui induit par l'installation de mouchards ou de caméras d’espionnage.

## Pourquoi une solution 100 % libre

Les technologies de contact tracing sont intéressantes d’un point de vue épidémiologique. Mais elles posent, en même temps, un risque pour les libertés individuelles. Ce risque peut surgir de manière franche, en amenant la surveillance généralisée de toute la population. Ou de manière insidieuse, à moyen et long terme, en incitant les personnes à s'accommoder d’un traçage régulier de leurs faits et gestes. Pour réduire ces risques, il est nécessaire de conserver un contrôle citoyen sur le “code source” (plan de fabrication) des applications.

Une stratégie pour garantir ce contrôle consiste à publier le code source de l’application sur des plateformes spécialisées. Ce code source, dit “Open Source”, sera alors accessible à quiconque veut le lire et le tester, dans le but de vérifier qu’aucune menace, vulnérabilité ou comportement frauduleux n’altère l’intégrité des données qui circulent à l’intérieur.

L’autre avantage d’un code source ouvert, c’est de rendre l’application prête à obtenir des contributions de la part de développeurs extérieurs au projet, et non plus seulement de la part d’une équipe restreinte. Aujourd’hui déjà, ces développeurs aident OpenStopCovid à améliorer la sécurité, les performances mais également l’usage et l’ergonomie de l’application et des composants dont elle dépend. Ces contributeurs constituent, en quelques sorte, une équipe de développement illimitée, et internationale.

A l’inverse, un code source fermé se déleste de tout contrôle extérieur encombrant et pose donc, par extension, des problèmes de légitimité et de sécurité à la société dans son ensemble.

## Les composants disponibles

Les principales composantes du projet sont les suivantes :

* Une application Android
* Une application Iphone
* Une interface pour les professionnels de santé (tiers de confiance)
* Quelques briques côté serveur assurant la sécurisation du dispositif

L’architecture que nous avons retenue s’appuie directement sur le protocole DP-3T, et utilise plusieurs composants de référence. Notre implémentation est représentée par le schéma suivant :

![Architecture]({{site.url}}/img/architecture.png)

## Comment contribuer

Vous pouvez suivre nos travaux sur GitHub : [https://github.com/OpenStopCovid](https://github.com/OpenStopCovid)

## Nous contacter

contact@openstopcovid.fr
Loading