Skip to content
Closed
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
12 changes: 11 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ on:

permissions:
contents: read
# Restrict artifact access to authorized users only
actions: read

jobs:
software-ci:
Expand Down Expand Up @@ -94,7 +96,7 @@ jobs:
retention-days: 30
path: latencies_report.csv

- name: Upload FPGA and PetaLinux artifacts
- name: Upload FPGA and PetaLinux artifacts (RESTRICTED - Authorized Users Only)
uses: actions/upload-artifact@v4
with:
name: qldpc-rfsoc-bitstream-artifacts
Expand All @@ -105,3 +107,11 @@ jobs:
petalinux/images/linux/BOOT.BIN
petalinux/images/linux/image.ub
petalinux/images/linux/download.bit

- name: Log artifact access notification
if: always()
run: |
echo "⚠️ SENSITIVE ARTIFACTS UPLOADED"
echo "These artifacts (bitstream, BOOT.BIN, image.ub) contain proprietary hardware configuration."
echo "Access is restricted to authorized collaborators and the repository owner only."
echo "GitHub Actions Run: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
9 changes: 9 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,15 @@ Le workflow contient un job `hardware-bitstream-build` qui s’exécute uniqueme

Le job matériel attend la réussite de `software-ci`, lance `make all`, puis publie les fichiers `.xsa`, `BOOT.BIN`, `image.ub` et `download.bit` comme artefacts GitHub Actions. Pour protéger la machine locale, il n’est pas déclenché par les pull requests : les changements doivent d’abord être fusionnés dans `main`, ou le workflow doit être lancé manuellement par un opérateur de confiance.

### Politique d'accès aux artifacts sensibles

Les artifacts matériels (bitstream, images boot, configurations) contiennent des designs propriétaires et sont **restreints aux utilisateurs autorisés**. Consultez [`SECURITY.md`](./SECURITY.md) pour les détails sur :

- 🔒 Contrôle d'accès aux artifacts matériels
- 🔐 Protections de branche et permissions
- 📋 Processus de déploiement sécurisé
- ⚠️ Bonnes pratiques de sécurité

## Test HIL automatisé

Le benchmark [`hil/hil_benchmark.cpp`](./hil/hil_benchmark.cpp) exécute 100 000 transferts AXI-DMA/FPGA, mesure chaque aller-retour en nanosecondes, exporte `latencies_report.csv` et vérifie la latence maximale.
Expand Down
103 changes: 103 additions & 0 deletions SECURITY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
# Politique de Sécurité et d'Accès

## Vue d'ensemble

Ce dépôt contient une implémentation d'un décodeur LDPC quantique avec support FPGA pour la carte AMD RFSoC ZCU111. Les artifacts matériels (bitstream, images bootloader, configurations de synthèse) contiennent des designs propriétaires et sont traités comme des ressources sensibles.

## Contrôle d'accès aux artifacts

### Artifacts sensibles

Les fichiers suivants générés par le workflow CI matériel sont **restreints** :

- `download.bit` - Bitstream FPGA (configuration hardware)
- `BOOT.BIN` - Bootloader PetaLinux
- `image.ub` - Image Linux compressée
- `*.xsa` - Export Xilinx pour réutilisation

### Politique d'accès

1. **Branche `main`** :
- Merges protégés : exige au minimum une revue approuvée
- Déploiement matériel manuel uniquement : `workflow_dispatch` avec `run_hardware=true`
- Exécution sur runner auto-hébergé sécurisé (`self-hosted`, `vivado`, `zcu111`)

2. **Pull Requests** :
- **Ne déclenchent JAMAIS** le job matériel (`hardware-bitstream-build`)
- Prévention des attaques par injection via code externe
- Seule la CI logicielle s'exécute (`ubuntu-latest`)

3. **Workflow_dispatch (Manuel)** :
- Réservé aux opérateurs de confiance
- Génère les artifacts sensibles
- Conservés 30 jours maximum
- Accessibles uniquement aux collaborateurs authentifiés

### Permissions GitHub Actions

```yaml
permissions:
contents: read # Lecture seule du code
actions: read # Lecture des exécutions (artifacts restreints)
```

Les artifacts sensibles ne peuvent être téléchargés que par :
- Le propriétaire du dépôt (`owner`)
- Les collaborateurs avec accès `push` ou `admin`
- Les utilisateurs authentifiés sur le dépôt privé (si applicable)

## Protections de branche

La branche `main` doit être protégée avec :

- ✅ Require pull request reviews before merging
- ✅ Require branches to be up to date before merging
- ✅ Require status checks to pass before merging (especially `software-ci`)
- ✅ Dismiss stale pull request approvals when new commits are pushed
- ✅ Require approval of the latest reviewable commit

## Déploiement matériel

### Processus sécurisé

```bash
# 1. Fusionner les changements dans main via PR revue
# 2. Attendre que software-ci passe
# 3. Déclencher manuellement le workflow :
# - Aller à GitHub Actions > QLDPC Software and FPGA CI
# - Cliquer "Run workflow"
# - Cocher "Run HLS, Vivado, PetaLinux, and HIL checks..."
# - Confirmer
# 4. Surveiller l'exécution sur le runner ZCU111 de confiance
# 5. Télécharger les artifacts (accès restreint)
```

## Bonnes pratiques de sécurité

1. **Ne jamais** utiliser un runner auto-hébergé sans protection
2. **Ne jamais** exécuter le workflow matériel depuis une PR externe
3. **Inspecter** toute modification des fichiers CMake et Makefile
4. **Conserver** les credentials Xilinx en dehors du dépôt (envar sur runner local)
5. **Auditer** les accès aux artifacts via les logs GitHub

## Incidents de sécurité

Pour signaler une vulnérabilité :

1. **Ne pas** créer d'issue publique
2. Contacter le propriétaire du dépôt via mail privé
3. Fournir : description, impact, recommandation de correction
4. Attendre la confirmation avant toute divulgation

## Mise à conformité

Dernier audit : 2026-09-06

Checklist :
- [x] Workflow matériel protégé (workflow_dispatch uniquement)
- [x] Pull requests sans accès matériel
- [x] Artifacts sensibles restreints à 30 jours
- [x] Runner auto-hébergé en confiance configuré
- [x] Permissions minimales appliquées
- [ ] Branche main protégée (à faire via GitHub UI)
- [ ] Audit des accès périodique