SBOM
Itha AB · Gäller Privera 0.9.0-beta22 · Senast uppdaterad: 2026-10-23
Beskriver komponentförteckningen (Software Bill of Materials) för Privera: format, innehåll, hur den tas fram och vilka luckor den har.
1. Var den finns
- SBOM:en för version 0.9.0-beta22, den aktuella versionen, finns på privera.se/security/sbom/privera-0.9.0-beta22.cdx.json, med kontrollsumma (SHA-256) i privera-0.9.0-beta22.cdx.json.sha256.
- Äldre versioner: SBOM:erna för 0.9.0-beta20 och 0.9.0-beta21 finns på samma plats, och den för 0.9.0-beta19 lämnas ut på begäran. De togs fram på det äldre sättet och har luckorna i avsnitt 7. Frågor om SBOM:en skickas till [email protected].
- SBOM:en är inte signerad. Kontrollsumman visar att filen inte har ändrats sedan den skrevs, men inte vem som skrev den.
- Från 0.9.0-beta22 tas SBOM:en fram ur det byggda paketet, i samma bygge som installern (avsnitt 4). Den har ändå kända luckor (avsnitt 6).
2. Format
- CycloneDX 1.5, JSON.
- Varje komponent har typ och namn, och varje komponent utom filerna har purl eller CPE. CPE anges där namnet är känt. Nästan alla komponenter har version (avsnitt 5).
- Varje programfil (.exe, .dll, .pyd och .node) står som filkomponent under den komponent den hör till, med SHA-256, storlek, versionsuppgift och om den bär en Authenticode-signatur.
- Beroendegrafen är med.
- serialNumber räknas fram ur innehållet, så två körningar med samma indata ger samma nummer.
- Metadatan anger vilken version av källkoden programmet och motorn är byggda ur, om arbetskopian hade ändringar som inte var incheckade, om det är ett signerat kundbygge, antalet programfiler och installerns filnamn och SHA-256.
- Komponenterna har egenskaper som anger var i programmet de ligger (
privera:paketering) och varifrån version och licens kommer.
3. Vad SBOM:en täcker
Från 0.9.0-beta22 läses uppgifterna ur det paket som byggts, inte ur låsfilerna. En komponent som inte finns i paketet kommer inte med, och en programfil i paketet som inte kan knytas till någon komponent stoppar bygget.
| Del | Med i SBOM:en |
|---|---|
| Programfiler | Varje programfil i paketet, med SHA-256 och signaturuppgift, under sin ägare. Avinstalleraren skapas först vid installationen och har därför ingen hash i SBOM:en. |
| npm-paket | Paketen i programmet, med version, purl och SHA-512 ur låsfilen, och de paket som är inbyggda i programfönstrets kodpaket. |
| Electron | Electron samt versionerna av Chromium, Node.js och V8 som ingår, prövade mot programfilen. |
| Installerare | NSIS 3.0.4.1 med sina insticksprogram och elevate.exe. Installerns egen SHA-256 står i metadatan. |
| Python-motorn | De paket som faktiskt finns i den paketerade motorn, med version, purl och licens. Motorns binärfiler är jämförda byte för byte med paketens egna filförteckningar, före signeringen. CPython 3.12.10 och PyInstaller, vars startprogram ingår. Itha AB:s egen motor, med källkodens kontrollsumma. |
| C-bibliotek i motorn | Med version och källa, bland annat OpenSSL 3.0.16, SQLite 3.49.1, zlib, expat, libffi, bzip2 och xz, som följer med CPython, libxml2 2.11.9 och libxslt 1.1.45 (i lxml), libyaml 0.2.5 (i PyYAML), qpdf med en statiskt länkad OpenSSL (i pikepdf), PDFium (i pypdfium2), OpenBLAS (i numpy) och libuv, Intel MKL och Intel OpenMP (i PyTorch). |
| Microsofts C- och C++-runtime | En komponent per version som följer med, med filerna under sig. |
| Inbäddade SBOM:er | Tokenizers, safetensors, Pillow, hf_xet och pydantic_core har egna SBOM:er, bland annat över sina Rust-delar. Deras komponenter står med, och SBOM-filerna refereras med SHA-256. HarfBuzz och raqm är inbyggda i Pillows typsnittsmodul och står med som ingående, med en notering att de är inaktiva eftersom FriBiDi saknas vid körning. Delar som Pillows SBOM nämner men vars kod inte finns i någon fil i paketet (FriBiDi, libimagequant och libxcb) är märkta excluded. |
| Tesseract och C-bibliotek | Tesseract 5.4.1 och de paket från conda-forge som bidrar med filer, med version, build, kanal och SHA-256. Varje fil i OCR-motorn är knuten till sitt paket och jämförd byte för byte med det. |
| Språkdata | swe.traineddata och eng.traineddata med SHA-256. |
| Språkmodellen | KB/bert-base-swedish-cased-ner vid en låst revision, som machine-learning-model, med MIT-licens och viktfilens SHA-256. Modellen ingår inte i installern utan hämtas första gången den behövs. |
Några uppgifter finns inte i paketet och står därför i skriptet tillsammans med sin källa: vilka versioner av Chromium, Node.js och V8 som hör till Electron-versionen, hashen för modellens viktfil enligt Hugging Face, licensen för språkmodellen och språkdatan och PyInstallers licens. Uppgifterna gäller bara exakt den version som står angiven, och Electron-uppgifterna prövas mot programfilen. Byts Electron-versionen eller modellens revision stoppar skriptet. Byts språkdatans version skrivs ingen licens in för den, och byts PyInstallers version anges dess licens utan undantaget för startprogrammet.
4. Så tas den fram och kontrolleras
- Från 0.9.0-beta22 tas SBOM:en fram av bygget självt, direkt efter att paketet och installern är byggda. Den skrivs bara om kontrollerna av det byggda paketet har gått igenom: Electrons spärrar i programfilen, programfilens version, att motorn bara innehåller paketen i sin låsfil och är den motor som byggdes, och programfilernas signaturer.
- Ett signerat kundbygge vägrar källkod med oincheckade ändringar och en motor som byggts med oincheckade ändringar, och varje programfil måste bära en Authenticode-signatur.
- SBOM:en prövas mot den officiella schemafilen för CycloneDX 1.5 innan den skrivs, och mot egna krav: varje id förekommer en gång, varje komponent har purl eller CPE och beroendegrafen hänger ihop. SBOM:en från provpaketeringen av 0.9.0-beta22 godkändes också av två andra verktyg för CycloneDX, och en medvetet förstörd kopia fälldes av alla tre.
- Installern läggs inte ut för nedladdning utan en SBOM från ett signerat bygge som anger just den installerns SHA-256.
- SBOM:erna för 0.9.0-beta19 till 0.9.0-beta21 togs fram för hand efter bygget, ur låsfilerna (avsnitt 7).
5. Komponenter med ofullständiga uppgifter
Utan version eller licens. Några komponenter som kommer ur de inbäddade SBOM:erna saknar version eller licens, eftersom paketets egen SBOM inte anger den.
Språkmodellens licens. Språkmodellen KB/bert-base-swedish-cased-ner har MIT-licens. KBLab vid Kungliga biblioteket angav licensen på modellkortet för KBLab/bert-base-swedish-cased-ner den 15 oktober 2026 och bekräftade den skriftligt till Itha AB samma dag. Filerna som Privera laddar är byte för byte desamma i de båda förråden. Från 0.9.0-beta22 anger SBOM:en licensen, och licenstexten följer med installationen. SBOM:erna för 0.9.0-beta21 och äldre togs fram före beskedet och anger ingen licens för modellen.
Licens som fritext i stället för SPDX-id. Uppgiften finns men går inte att maskinläsa entydigt, till exempel "BSD License" utan variant eller "Apache Software License" utan version. Det gäller bland annat colorama, jinja2, mpmath, sympy, safetensors, tokenizers och pypdfium2, några av conda-paketen, Microsofts runtime, Intels bibliotek samt Itha AB:s egen motor, som är proprietär.
Rättad licens. PyInstaller har licensen satt i skriptet i stället för ur paketets metadata, och bara för en angiven version: GPL-2.0-or-later WITH Bootloader-exception, som tillåter att startprogrammet sprids inbäddat.
6. Kända luckor
- Ingen sårbarhetsskanning mot SBOM:en, till exempel med OSV eller Grype. Flera av de inbyggda biblioteken är äldre versioner. OpenSSL 3.0.16, som följer med CPython i motorn, har kända sårbarheter. Motorn använder det för den krypterade förbindelsen när språkmodellen hämtas från Hugging Face första gången, och motorn gör inga andra nätverksanrop. Se Sårbarhetshantering.
- Inga hashar för Python-paketen som paket. Programfilerna har SHA-256, och motorns binärfiler är jämförda med paketens filförteckningar, men paketen har ingen egen hash, eftersom låsfilen saknar hashar. Python-kod som ligger packad i motorns arkiv har ingen hash i SBOM:en.
- Chromiums tredjepartskomponenter listas inte som egna komponenter. Licenserna finns i
LICENSES.chromium.htmli installationen. - Kod som byggverktygen lägger in listas inte, till exempel hjälpkod i gränssnittets kodpaket och grundstilar.
- Licensservern ingår inte än. Licensservern levereras inte till kunden, men räknas som produktens fjärrdatabehandling enligt CRA och ska därför in i SBOM:en (Planerat, mål 2026-11-30). Webbplatsen ingår inte i produkten.
7. Äldre SBOM:er (0.9.0-beta19 till 0.9.0-beta21)
De togs fram för hand efter bygget, ur de filer som styr bygget, främst låsfilerna, och skiljer sig därför från det som paketerades. En jämförelse 2026-10-23 av SBOM:en för 0.9.0-beta21 med den signerade, paketerade 0.9.0-beta21 visade följande. De publicerade filerna är inte ändrade i efterhand.
- Paket i motorn som inte stod i SBOM:en: utvecklingsverktygen pytest och mypy med sina beroenden (pluggy, iniconfig, mypy_extensions, librt och ast_serialize), och biblioteket zstandard. Från 0.9.0-beta22 följer de inte med i motorn.
- Paket i SBOM:en som inte fanns i motorn: cffi, cryptography, pdfminer-six, pdfplumber och pycparser.
- Källkodsversionen: motorn i 0.9.0-beta21 byggdes ur en närliggande version med ändringar som inte var incheckade. Skillnaden gällde enligt vår kontroll bara byggfiler, men det går inte att bevisa i efterhand.
- Inbäddade bibliotek saknades som egna komponenter, bland annat OpenSSL 3.0.16 och SQLite i CPython, PDFium, qpdf, motorns C- och C++-runtime från Microsoft och Rust-paketen i tokenizers. SBOM:ens OpenSSL-post gällde en annan version, den som följer med Tesseract.
- Alla låsta conda-paket stod med, också de som inte bidrar med någon fil till installern.
nsissaknade version, och språkmodellen saknade licens.
8. CRA
EU:s cyberresiliensförordning, förordning (EU) 2024/2847, bilaga I del II punkt 1, kräver att tillverkaren upprättar en SBOM i ett vanligt maskinläsbart format som täcker minst produktens direkta beroenden. Förordningen gäller fullt ut från 2027-12-11. Om CRA också kräver att SBOM:en lämnas till kunden har vi inte kontrollerat. Vi publicerar den ändå.
Alla dokument finns också samlade i en PDF för e-post.