Skip to content
Draft
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
14 changes: 13 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ Each workload represents a real-world use case with clear specifications, refere

- [**BERT**](./BERT/index.html). Privacy-preserving BERT inference on encrypted inputs. Currently supports [BERT-Base (110M)](https://huggingface.co/google-bert/bert-base-cased-finetuned-mrpc) inference on the MRPC task in the [GLUE benchmark](https://gluebenchmark.com/).

- [**Face Recognition**](./face-recognition/index.html). End-to-end privacy-preserving face verification with encrypted feature extraction and matching, including single-pair and batched benchmark results.

*Additional workloads are under development. Check back for updates.*

## Suite Structure
Expand Down Expand Up @@ -84,6 +86,16 @@ For questions or to get involved:
Visit the Homomorphic Encryption Standardization community:
[homomorphicencryption.org](https://homomorphicencryption.org)

Additional tutorials and research:

- [Computer Vision over Homomorphically Encrypted Data — CVPR 2025 Tutorial](https://fhe4cv.github.io/)
- [SecureRAG: End-to-End Secure Retrieval-Augmented Generation](https://openreview.net/pdf?id=5uXACIHz6K) — *NeurIPS GenAI4Health Workshop, 2025*.
- [Homomorphically Encrypted Biometric Template Fusion and Matching](https://doi.org/10.1109/TBIOM.2025.3595438) — *IEEE Transactions on Biometrics, Behavior, and Identity Science, 2025*.
- [AutoFHE: Automated Adaptation of CNNs for Efficient Evaluation over FHE](https://arxiv.org/abs/2310.08012) — *33rd USENIX Security Symposium, 2024*.
- [HERS: Homomorphically Encrypted Representation Search](https://arxiv.org/abs/2003.12197) — *IEEE Transactions on Biometrics, Behavior, and Identity Science, 2022*.
- [HEFT: Homomorphically Encrypted Fusion of Biometric Templates](https://arxiv.org/abs/2208.07241) — *IEEE International Joint Conference on Biometrics, 2022*.
- [Secure Face Matching Using Fully Homomorphic Encryption](https://arxiv.org/abs/1805.00577) — *IEEE International Conference on Biometrics: Theory, Applications, and Systems, 2018*.

### Organizers
Andreea Alexandru, Flavio Bergamaschi, Shruthi Gorantala, Shai Halevi

Expand All @@ -98,4 +110,4 @@ Andreea Alexandru, Flavio Bergamaschi, Shruthi Gorantala, Shai Halevi

---

[Code of Conduct](./CODE_OF_CONDUCT.html) | © 2026 [HomomorphicEncryption.org](https://homomorphicencryption.org) | Last updated 2026-02-19
[Code of Conduct](./CODE_OF_CONDUCT.html) | © 2026 [HomomorphicEncryption.org](https://homomorphicencryption.org) | Last updated 2026-08-06
169 changes: 169 additions & 0 deletions face-recognition/Large.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="data:,">
<title>FHE Benchmarking Results - Face Recognition (Large Batch - 1,024)</title>
<link rel="stylesheet" href="https://cdn.datatables.net/1.13.6/css/jquery.dataTables.min.css">
<link rel="stylesheet" href="https://cdn.datatables.net/buttons/2.4.2/css/buttons.dataTables.min.css">
<script src="https://code.jquery.com/jquery-3.7.0.min.js"></script>
<script src="https://cdn.datatables.net/1.13.6/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/buttons/2.4.2/js/dataTables.buttons.min.js"></script>
<script src="https://cdn.datatables.net/buttons/2.4.2/js/buttons.colVis.min.js"></script>
<style>
body { font-family: Arial, sans-serif; margin: 0; padding: 16px; color: #17202a; }
h1 { font-size: 1.5rem; letter-spacing: 0; }
.table-wrap { width: 100%; overflow-x: auto; }
#resultsTable { border-collapse: collapse; width: 100%; }
.table-wrap table.dataTable th, .table-wrap table.dataTable td { padding: 4px 8px; white-space: nowrap; }
.table-wrap table.dataTable thead tr:first-child th { color: white; text-align: center; }
.table-wrap table.dataTable thead tr:nth-child(2) th { color: white; font-size: 0.85rem; }
.group-header { text-align: center !important; vertical-align: middle; }
.submitter-header { background: #2471a3 !important; }
.bandwidth-header { background: #1e8449 !important; }
.quality-header { background: #7d3c98 !important; }
.harness-timing-header { background: #b05d0b !important; }
.server-timing-header { background: #2874a6 !important; }
#resultsTable tbody tr:nth-child(odd) { background: #edf2f4; }
.dt-buttons { margin-bottom: 10px; }
</style>
</head>
<body>
<h1>FHE Benchmarking Results - Face Recognition (Large Batch - 1,024)</h1>
<p>Timing and batched quality values are averages across 3 measurement run(s). Single-pair scores and labels are listed per run. Durations are wall time unless labeled as worker time.</p>
<div class="table-wrap">
<table id="resultsTable" class="display">
<thead>
<tr>
<th class="submitter-header group-header" colspan="9">Submitter</th>
<th class="bandwidth-header group-header" colspan="4">Bandwidth</th>
<th class="quality-header group-header" colspan="11">Quality</th>
<th class="harness-timing-header group-header" colspan="14">Timing (harness)</th>
<th class="server-timing-header group-header" colspan="13">Timing (server)</th>
</tr>
<tr>
<th class="submitter-header">Name</th>
<th class="submitter-header">Date</th>
<th class="submitter-header">CPU</th>
<th class="submitter-header">RAM</th>
<th class="submitter-header">Orion</th>
<th class="submitter-header">Slots</th>
<th class="submitter-header">Chunk</th>
<th class="submitter-header">R/L</th>
<th class="submitter-header">Runs</th>
<th class="bandwidth-header">Keys</th>
<th class="bandwidth-header">Model</th>
<th class="bandwidth-header">Input</th>
<th class="bandwidth-header">Result</th>
<th class="quality-header">FHE EER</th>
<th class="quality-header">FHE TAR@1%</th>
<th class="quality-header">FHE TAR@0.1%</th>
<th class="quality-header">ArcFace EER</th>
<th class="quality-header">ArcFace TAR@1%</th>
<th class="quality-header">ArcFace TAR@0.1%</th>
<th class="quality-header">EER gap</th>
<th class="quality-header">TAR@1% gap</th>
<th class="quality-header">TAR@0.1% gap</th>
<th class="quality-header">Max EER gap</th>
<th class="quality-header">Result</th>
<th class="harness-timing-header">Total</th>
<th class="harness-timing-header">Offline setup</th>
<th class="harness-timing-header">Online evaluation</th>
<th class="harness-timing-header">Dataset</th>
<th class="harness-timing-header">Keygen</th>
<th class="harness-timing-header">Model prep</th>
<th class="harness-timing-header">Input gen</th>
<th class="harness-timing-header">Input prep</th>
<th class="harness-timing-header">Input enc</th>
<th class="harness-timing-header">Compute</th>
<th class="harness-timing-header">Decrypt</th>
<th class="harness-timing-header">Postprocess</th>
<th class="harness-timing-header">ArcFace</th>
<th class="harness-timing-header">Quality</th>
<th class="server-timing-header">Total (wall)</th>
<th class="server-timing-header">Process lifetime</th>
<th class="server-timing-header">Setup (wall)</th>
<th class="server-timing-header">Model I/O</th>
<th class="server-timing-header">Runtime compile</th>
<th class="server-timing-header">Input I/O (worker)</th>
<th class="server-timing-header">Transport (worker)</th>
<th class="server-timing-header">Inference (worker)</th>
<th class="server-timing-header">Compute (wall)</th>
<th class="server-timing-header">Backbones (worker)</th>
<th class="server-timing-header">Normalize (worker)</th>
<th class="server-timing-header">Inner product (worker)</th>
<th class="server-timing-header">Mean / pair</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/fhe-benchmarking/face-recognition">CryptoFace</a></td>
<td>2026-08-06 11:57:25</td>
<td>AMD EPYC 7502 32-Core Processor</td>
<td>1007.7 GiB</td>
<td>7e27281354f9</td>
<td>10</td>
<td>50</td>
<td>L</td>
<td>3</td>
<td>28.8G</td>
<td>114.1G</td>
<td>128.1G</td>
<td>1.0G</td>
<td>0.0723</td>
<td>0.8477</td>
<td>0.8203</td>
<td>0.0605</td>
<td>0.9355</td>
<td>0.9316</td>
<td>0.0117</td>
<td>-0.0879</td>
<td>-0.1113</td>
<td>0.1500</td>
<td>PASS</td>
<td>12.507h</td>
<td>17.689m</td>
<td>12.213h</td>
<td>325.8ms</td>
<td>8.320m</td>
<td>9.364m</td>
<td>19.437s</td>
<td>22.180m</td>
<td>46.576m</td>
<td>10.688h</td>
<td>3.428m</td>
<td>47.4ms</td>
<td>18.950m</td>
<td>11.7ms</td>
<td>10.644h</td>
<td>10.677h</td>
<td>22.475m</td>
<td>13.842m</td>
<td>8.478m</td>
<td>51.956m</td>
<td>9.143m</td>
<td>663.424h</td>
<td>10.270h</td>
<td>662.592h</td>
<td>42.366m</td>
<td>7.560m</td>
<td>36.105s</td>
</tr>
</tbody>
</table>
</div>
<script>
$(document).ready(function() {
$('#resultsTable').DataTable({
dom: 'Bfrtip',
buttons: [{ extend: 'colvis' }],
paging: false,
searching: false,
info: false,
scrollX: true
});
});
</script>
</body>
</html>
169 changes: 169 additions & 0 deletions face-recognition/Medium.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="data:,">
<title>FHE Benchmarking Results - Face Recognition (Medium Batch - 256)</title>
<link rel="stylesheet" href="https://cdn.datatables.net/1.13.6/css/jquery.dataTables.min.css">
<link rel="stylesheet" href="https://cdn.datatables.net/buttons/2.4.2/css/buttons.dataTables.min.css">
<script src="https://code.jquery.com/jquery-3.7.0.min.js"></script>
<script src="https://cdn.datatables.net/1.13.6/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/buttons/2.4.2/js/dataTables.buttons.min.js"></script>
<script src="https://cdn.datatables.net/buttons/2.4.2/js/buttons.colVis.min.js"></script>
<style>
body { font-family: Arial, sans-serif; margin: 0; padding: 16px; color: #17202a; }
h1 { font-size: 1.5rem; letter-spacing: 0; }
.table-wrap { width: 100%; overflow-x: auto; }
#resultsTable { border-collapse: collapse; width: 100%; }
.table-wrap table.dataTable th, .table-wrap table.dataTable td { padding: 4px 8px; white-space: nowrap; }
.table-wrap table.dataTable thead tr:first-child th { color: white; text-align: center; }
.table-wrap table.dataTable thead tr:nth-child(2) th { color: white; font-size: 0.85rem; }
.group-header { text-align: center !important; vertical-align: middle; }
.submitter-header { background: #2471a3 !important; }
.bandwidth-header { background: #1e8449 !important; }
.quality-header { background: #7d3c98 !important; }
.harness-timing-header { background: #b05d0b !important; }
.server-timing-header { background: #2874a6 !important; }
#resultsTable tbody tr:nth-child(odd) { background: #edf2f4; }
.dt-buttons { margin-bottom: 10px; }
</style>
</head>
<body>
<h1>FHE Benchmarking Results - Face Recognition (Medium Batch - 256)</h1>
<p>Timing and batched quality values are averages across 3 measurement run(s). Single-pair scores and labels are listed per run. Durations are wall time unless labeled as worker time.</p>
<div class="table-wrap">
<table id="resultsTable" class="display">
<thead>
<tr>
<th class="submitter-header group-header" colspan="9">Submitter</th>
<th class="bandwidth-header group-header" colspan="4">Bandwidth</th>
<th class="quality-header group-header" colspan="11">Quality</th>
<th class="harness-timing-header group-header" colspan="14">Timing (harness)</th>
<th class="server-timing-header group-header" colspan="13">Timing (server)</th>
</tr>
<tr>
<th class="submitter-header">Name</th>
<th class="submitter-header">Date</th>
<th class="submitter-header">CPU</th>
<th class="submitter-header">RAM</th>
<th class="submitter-header">Orion</th>
<th class="submitter-header">Slots</th>
<th class="submitter-header">Chunk</th>
<th class="submitter-header">R/L</th>
<th class="submitter-header">Runs</th>
<th class="bandwidth-header">Keys</th>
<th class="bandwidth-header">Model</th>
<th class="bandwidth-header">Input</th>
<th class="bandwidth-header">Result</th>
<th class="quality-header">FHE EER</th>
<th class="quality-header">FHE TAR@1%</th>
<th class="quality-header">FHE TAR@0.1%</th>
<th class="quality-header">ArcFace EER</th>
<th class="quality-header">ArcFace TAR@1%</th>
<th class="quality-header">ArcFace TAR@0.1%</th>
<th class="quality-header">EER gap</th>
<th class="quality-header">TAR@1% gap</th>
<th class="quality-header">TAR@0.1% gap</th>
<th class="quality-header">Max EER gap</th>
<th class="quality-header">Result</th>
<th class="harness-timing-header">Total</th>
<th class="harness-timing-header">Offline setup</th>
<th class="harness-timing-header">Online evaluation</th>
<th class="harness-timing-header">Dataset</th>
<th class="harness-timing-header">Keygen</th>
<th class="harness-timing-header">Model prep</th>
<th class="harness-timing-header">Input gen</th>
<th class="harness-timing-header">Input prep</th>
<th class="harness-timing-header">Input enc</th>
<th class="harness-timing-header">Compute</th>
<th class="harness-timing-header">Decrypt</th>
<th class="harness-timing-header">Postprocess</th>
<th class="harness-timing-header">ArcFace</th>
<th class="harness-timing-header">Quality</th>
<th class="server-timing-header">Total (wall)</th>
<th class="server-timing-header">Process lifetime</th>
<th class="server-timing-header">Setup (wall)</th>
<th class="server-timing-header">Model I/O</th>
<th class="server-timing-header">Runtime compile</th>
<th class="server-timing-header">Input I/O (worker)</th>
<th class="server-timing-header">Transport (worker)</th>
<th class="server-timing-header">Inference (worker)</th>
<th class="server-timing-header">Compute (wall)</th>
<th class="server-timing-header">Backbones (worker)</th>
<th class="server-timing-header">Normalize (worker)</th>
<th class="server-timing-header">Inner product (worker)</th>
<th class="server-timing-header">Mean / pair</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/fhe-benchmarking/face-recognition">CryptoFace</a></td>
<td>2026-08-05 19:34:36</td>
<td>AMD EPYC 7502 32-Core Processor</td>
<td>1007.7 GiB</td>
<td>7e27281354f9</td>
<td>10</td>
<td>50</td>
<td>L</td>
<td>3</td>
<td>28.8G</td>
<td>114.1G</td>
<td>32.0G</td>
<td>258.6M</td>
<td>0.0868</td>
<td>0.8395</td>
<td>0.8208</td>
<td>0.0721</td>
<td>0.9256</td>
<td>0.9209</td>
<td>0.0146</td>
<td>-0.0861</td>
<td>-0.1001</td>
<td>0.1500</td>
<td>PASS</td>
<td>3.418h</td>
<td>21.038m</td>
<td>3.067h</td>
<td>415.5ms</td>
<td>8.578m</td>
<td>12.453m</td>
<td>5.577s</td>
<td>4.611m</td>
<td>12.660m</td>
<td>2.670h</td>
<td>1.675m</td>
<td>25.4ms</td>
<td>4.779m</td>
<td>64.8ms</td>
<td>2.633h</td>
<td>2.664h</td>
<td>20.390m</td>
<td>12.060m</td>
<td>8.221m</td>
<td>8.295m</td>
<td>1.903m</td>
<td>143.533h</td>
<td>2.294h</td>
<td>143.339h</td>
<td>9.848m</td>
<td>1.763m</td>
<td>32.254s</td>
</tr>
</tbody>
</table>
</div>
<script>
$(document).ready(function() {
$('#resultsTable').DataTable({
dom: 'Bfrtip',
buttons: [{ extend: 'colvis' }],
paging: false,
searching: false,
info: false,
scrollX: true
});
});
</script>
</body>
</html>
Loading