-
Notifications
You must be signed in to change notification settings - Fork 7
Open
Labels
Description
Status quo: Neither the public website https://technology.a-sit.at/pdf-over-2/ nor the project's GitHub readme.md addresses how the process of signing PDFs with ID Austria works behind the scenes.
Inquiry: I'd appreciate public documentation, at least as a high level outline.
How does the signing of PDFs with ID Austria work technically?
For end users there are different possibilities to sign PDFs with ID Austria:
- In the mobile app Digitales Amt.
- In the desktop app https://technology.a-sit.at/pdf-over/
- In the web app at https://secure.oesterreich.gv.at/digitales-amt/pdf-sign/
Also in method 2+3 you have to confirm the signing in the app "Digitales Amt". So I assume some part of the authorization and/or signing process happens there.
Please explain the whole process
- Which data travels from where to where?
- Where is the signing happening?
- Where is the final PDF compiled? Original PDF + digital signature + the optional visual signature seal → Final signed PDF. Does this happen server side or client side?
- Data retention along the way?
The more detailed the better!
I asked ChatGPT those questions and it gave me quite a convincing process outline:
- PDF Preprocessing on the Client (PDF digest calculated + signature container prepared)
- Communication with ID Austria (checks request syntax + initial authorization)
- User Consent via Digitales Amt App (2FA)
- Server-Side Signing of the digest (private key resides NOT in "Digitales Amt" mobile app but in virtual qualified signature creation device (QSCD) within the trusted server infrastructure of ID Austria, which signs the digest, the raw PDF never reaches the server)
- Original PDF + digital signature + visual seal → Compiled into final PDF
ChatGPT's answer had some contradictions and ambiguity in it, especially regarding the web app:
- Ad step 1: It claimed the PDF is uploaded to the server
- But I think only sent to the browser's local storage, there the digest is created (with the pdf.worker.js) and only that digest gets uploaded
- Ad step 4: Then the digest is signed in the server side QSCD
- Ad step 5: And the compilation of the final PDF also happens client side because it downloads "all the ingredients":
- the
marker_(de|en).pdf(visual seal template) - signature JSON (https://secure.oesterreich.gv.at/digitales-amt/pdf-sign/api/signature?reqId=xxx)
- and the final download is a
blob://URL which is a strong indicator, that the original and final PDF only exist in client side local storage.
- the
When confronting ChatGPT with these new findings it also assumed that original PDF and final PDF only ever exist client side, and never hit the server.
I'd very much appreciate an outline
- Here on Github in technical detail.
- On the end user web page, in easy understandable language, which nevertheless transparently lays out whether/how the raw PDF data travels, whether/where/how long data retention happens, and where the signature happens.
- Or at least proper links to the relevant sources.
Thanks!