SYNTHETIC SAMPLE. Banco Ejemplo is not a real institution and was never a client.
Sample deliverable · quantum threat assessment
Migration evidence file.
What a completed assessment looks like, prepared for an invented mid-size Spanish bank so the format can be shown without a client’s data in it.
The bank, the 12 assets and every number are invented. The scoring rule, the regulatory references and the checker at the end are real.
SYNTHETIC SAMPLE. Banco Ejemplo is not a real institution and was never a client.
Executive brief
What the board is told.
5 of 12 inventoried assets are critical on a 10-year horizon. The cause is how long things must be trusted, not a fault in today’s setup: customer records must stay confidential, and mortgage and settlement records must stay verifiable, for longer than the cryptography protecting them is expected to hold.
The internal certificate authority sets the pace: everything chains to it, so its migration starts first. Nothing here calls for an emergency. It calls for a dated programme, begun this quarter.
SYNTHETIC SAMPLE. Banco Ejemplo is not a real institution and was never a client.
Inventory, ranked by exposure
X is how long the asset must stay protected, Y how long migrating it takes, Z = 10 years. The rule’s tier is computed by the same code as the exposure scorer. The analyst’s tier adds what the rule cannot see; at Z = 10 they differ on 7 rows, and the note says why.
The rule’s tier moves with Z. The analyst’s tier was set at Z = 10 and does not; at this horizon they differ on 7 of 12 rows. Open a row to see why.
Bar: solid is X, faint is Y, the gold line is Z. Past the line, X + Y exceeds the horizon.
SYNTHETIC SAMPLE. Banco Ejemplo is not a real institution and was never a client.
Regulatory cross-reference
Which rule reaches which asset.
The encryption policy must provide for updating or changing the cryptographic technology on the basis of developments in cryptanalysis.
Reaches: A-01, A-02, A-03, A-04, A-05, A-06, A-07, A-08, A-09, A-10, A-11A register of all certificates and certificate-storing devices, kept up to date, at least for ICT assets supporting critical or important functions.
Reaches: A-02, A-08, A-10High-risk use cases transitioned by 31 December 2030. A recommendation to EU Member States, not a law that binds a firm directly. It cites DORA and NIS2 as rules that already require state-of-the-art cryptography.
Reaches: A-01, A-02, A-03, A-04, A-05Classical key establishment deprecated after 2030; classical public-key algorithms disallowed after 2035. US guidance, cited for its dated schedule.
Reaches: A-01, A-02, A-03, A-04, A-05, A-06, A-07, A-08, A-09, A-10, A-11SYNTHETIC SAMPLE. Banco Ejemplo is not a real institution and was never a client.
Roadmap
Sequenced by dependency, not by severity.
Root and signing first
Migrate the internal PKI root (A-02) to ML-DSA and run dual signing on the code signing chain (A-08). These have the longest reach and the fewest outside dependencies, so they set the pace for everything else.
Long-lived data and signatures
Re-encrypt the personal data archive (A-01) and due diligence files (A-05) under hybrid ML-KEM envelopes, oldest records first, and protect the signed mortgage (A-03) and settlement (A-04) records with archival timestamps renewed under ML-DSA (evidence records, RFC 4998), so the originals stay verifiable without being signed again.
Counterparty surfaces
Open hybrid key exchange talks with the payment gateway counterparties (A-06) and book the card HSM refresh (A-07) into the hardware cycle. Both depend on someone else agreeing a date, so they start early.
Short-lived surfaces
Move the online banking front end (A-09), mobile pins (A-10) and service mesh (A-11) as their normal release cycles come round.
SYNTHETIC SAMPLE. Banco Ejemplo is not a real institution and was never a client.
The evidence file
The part you can check without us.
In a real engagement, the inventory, the exposure ranking and the migration plan are delivered as sealed, linked receipts in one evidence file, with the ranking’s X, Y and Z assumptions sealed as its input. Any later edit fails verification and names the check that broke. Checking needs no account with us and no network call; the checker is one published file.
A real evidence file, from a different project
The findings above are invented, so no receipt is issued for them. Below is a real one: the evidence file of our assessment of paramiko 5.0.0, an open-source SSH library, not a client. Open each part, check the file in your browser, then hide one finding and watch the check fail.
Every use of cryptography our scanner found in the source (41files read), including algorithms the code offers by name, each with its file and line. A scan of source has gaps: it can miss dependencies, compiled code and choices made at runtime. Each finding is ranked by one published rule (Mosca's): if what it protects must stay secret for X = 12 years, and moving off it takes Y = 3 years, then X + Y = 15 years is longer than the Z = 10-year horizon we plan against, so it has to move now. Change those numbers and the ranking changes; they are sealed in the record.
| Algorithm | Where | Ranking | Why |
|---|---|---|---|
| 3DES | transport.py:263 | Weak classically | Weak without a quantum computer (MD5 and SHA-1 against collisions, 3DES, DES and other 64-bit-block ciphers by their block size, RC4 outright). Whether that matters depends on the use; replace it where the format allows, whatever the horizon. |
| 3DES | transport.py:182 | Weak classically | Weak without a quantum computer (MD5 and SHA-1 against collisions, 3DES, DES and other 64-bit-block ciphers by their block size, RC4 outright). Whether that matters depends on the use; replace it where the format allows, whatever the horizon. |
| MD5 | pkey.py:390 | Weak classically | Weak without a quantum computer (MD5 and SHA-1 against collisions, 3DES, DES and other 64-bit-block ciphers by their block size, RC4 outright). Whether that matters depends on the use; replace it where the format allows, whatever the horizon. |
| SHA1 | config.py:449 | Weak classically | Weak without a quantum computer (MD5 and SHA-1 against collisions, 3DES, DES and other 64-bit-block ciphers by their block size, RC4 outright). Whether that matters depends on the use; replace it where the format allows, whatever the horizon. |
| DH | transport.py:324 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. |
| DH | kex_group16.py:35 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. |
| DH | kex_group16.py:30 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. |
| DH | kex_group14.py:45 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. |
| DH | transport.py:325 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. |
| DH | transport.py:219 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. |
| DH | transport.py:218 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. |
| DH | transport.py:220 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. |
| DH | kex_gex.py:51 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. |
| DH | transport.py:326 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. |
| EC | ecdsakey.py:167 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. The scanner did not determine how this key is used, so it takes the stricter case: the harvestable case, where recorded traffic is exposed. |
| EC | kex_ecdh_nist.py:113 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. The scanner did not determine how this key is used, so it takes the stricter case: the harvestable case, where recorded traffic is exposed. |
| EC | ecdsakey.py:254 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. The scanner did not determine how this key is used, so it takes the stricter case: the harvestable case, where recorded traffic is exposed. |
| EC | ecdsakey.py:224 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. The scanner did not determine how this key is used, so it takes the stricter case: the harvestable case, where recorded traffic is exposed. |
| EC | ecdsakey.py:268 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. The scanner did not determine how this key is used, so it takes the stricter case: the harvestable case, where recorded traffic is exposed. |
| EC | ecdsakey.py:305 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. The scanner did not determine how this key is used, so it takes the stricter case: the harvestable case, where recorded traffic is exposed. |
| EC | kex_ecdh_nist.py:151 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. The scanner did not determine how this key is used, so it takes the stricter case: the harvestable case, where recorded traffic is exposed. |
| EC | kex_ecdh_nist.py:67 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. The scanner did not determine how this key is used, so it takes the stricter case: the harvestable case, where recorded traffic is exposed. |
| EC | ecdsakey.py:242 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. The scanner did not determine how this key is used, so it takes the stricter case: the harvestable case, where recorded traffic is exposed. |
| EC | kex_ecdh_nist.py:71 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. The scanner did not determine how this key is used, so it takes the stricter case: the harvestable case, where recorded traffic is exposed. |
| EC | kex_ecdh_nist.py:145 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. The scanner did not determine how this key is used, so it takes the stricter case: the harvestable case, where recorded traffic is exposed. |
| EC | kex_ecdh_nist.py:117 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. The scanner did not determine how this key is used, so it takes the stricter case: the harvestable case, where recorded traffic is exposed. |
| EC | kex_ecdh_nist.py:23 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. The scanner did not determine how this key is used, so it takes the stricter case: the harvestable case, where recorded traffic is exposed. |
| EC | kex_ecdh_nist.py:59 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. The scanner did not determine how this key is used, so it takes the stricter case: the harvestable case, where recorded traffic is exposed. |
| ECDH | kex_ecdh_nist.py:143 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. |
| ECDH | transport.py:327 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. |
| ECDH | kex_ecdh_nist.py:21 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. |
| ECDH | transport.py:329 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. |
| ECDH | transport.py:216 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. |
| ECDH | transport.py:215 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. |
| ECDH | transport.py:328 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. |
| ECDH | kex_ecdh_nist.py:149 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. |
| ECDH | transport.py:217 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. |
| ECDSA | transport.py:201 | Act now | X plus Y exceeds Z by 5 years. Nothing can be harvested from a signature, but once the capability exists the key can be forged; X is how long the key must still be trusted. |
| ECDSA | transport.py:208 | Act now | X plus Y exceeds Z by 5 years. Nothing can be harvested from a signature, but once the capability exists the key can be forged; X is how long the key must still be trusted. |
| ECDSA | transport.py:313 | Act now | X plus Y exceeds Z by 5 years. Nothing can be harvested from a signature, but once the capability exists the key can be forged; X is how long the key must still be trusted. |
| ECDSA | transport.py:199 | Act now | X plus Y exceeds Z by 5 years. Nothing can be harvested from a signature, but once the capability exists the key can be forged; X is how long the key must still be trusted. |
| ECDSA | transport.py:210 | Act now | X plus Y exceeds Z by 5 years. Nothing can be harvested from a signature, but once the capability exists the key can be forged; X is how long the key must still be trusted. |
| ECDSA | transport.py:315 | Act now | X plus Y exceeds Z by 5 years. Nothing can be harvested from a signature, but once the capability exists the key can be forged; X is how long the key must still be trusted. |
| ECDSA | transport.py:317 | Act now | X plus Y exceeds Z by 5 years. Nothing can be harvested from a signature, but once the capability exists the key can be forged; X is how long the key must still be trusted. |
| ECDSA | transport.py:200 | Act now | X plus Y exceeds Z by 5 years. Nothing can be harvested from a signature, but once the capability exists the key can be forged; X is how long the key must still be trusted. |
| ECDSA | transport.py:209 | Act now | X plus Y exceeds Z by 5 years. Nothing can be harvested from a signature, but once the capability exists the key can be forged; X is how long the key must still be trusted. |
| ED25519 | transport.py:198 | Act now | X plus Y exceeds Z by 5 years. Nothing can be harvested from a signature, but once the capability exists the key can be forged; X is how long the key must still be trusted. |
| ED25519 | transport.py:207 | Act now | X plus Y exceeds Z by 5 years. Nothing can be harvested from a signature, but once the capability exists the key can be forged; X is how long the key must still be trusted. |
| ED25519 | ed25519key.py:42 | Act now | X plus Y exceeds Z by 5 years. Nothing can be harvested from a signature, but once the capability exists the key can be forged; X is how long the key must still be trusted. |
| ED25519 | transport.py:319 | Act now | X plus Y exceeds Z by 5 years. Nothing can be harvested from a signature, but once the capability exists the key can be forged; X is how long the key must still be trusted. |
| RSA | rsakey.py:43 | Act now | X plus Y exceeds Z by 5 years. Nothing can be harvested from a signature, but once the capability exists the key can be forged; X is how long the key must still be trusted. |
| RSA | rsakey.py:211 | Act now | X plus Y exceeds Z by 5 years. Nothing can be harvested from a signature, but once the capability exists the key can be forged; X is how long the key must still be trusted. |
| RSA | agent.py:53 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. The scanner did not determine how this key is used, so it takes the stricter case: the harvestable case, where recorded traffic is exposed. |
| RSA | rsakey.py:210 | Act now | X plus Y exceeds Z by 5 years. Nothing can be harvested from a signature, but once the capability exists the key can be forged; X is how long the key must still be trusted. |
| RSA | transport.py:791 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. The scanner did not determine how this key is used, so it takes the stricter case: the harvestable case, where recorded traffic is exposed. |
| RSA | transport.py:203 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. The scanner did not determine how this key is used, so it takes the stricter case: the harvestable case, where recorded traffic is exposed. |
| RSA | client.py:431 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. The scanner did not determine how this key is used, so it takes the stricter case: the harvestable case, where recorded traffic is exposed. |
| RSA | rsakey.py:41 | Act now | X plus Y exceeds Z by 5 years. Nothing can be harvested from a signature, but once the capability exists the key can be forged; X is how long the key must still be trusted. |
| RSA | transport.py:1317 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. The scanner did not determine how this key is used, so it takes the stricter case: the harvestable case, where recorded traffic is exposed. |
| RSA | agent.py:54 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. The scanner did not determine how this key is used, so it takes the stricter case: the harvestable case, where recorded traffic is exposed. |
| RSA | transport.py:1318 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. The scanner did not determine how this key is used, so it takes the stricter case: the harvestable case, where recorded traffic is exposed. |
| RSA | rsakey.py:78 | Act now | X plus Y exceeds Z by 5 years. Nothing can be harvested from a signature, but once the capability exists the key can be forged; X is how long the key must still be trusted. |
| RSA | transport.py:211 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. The scanner did not determine how this key is used, so it takes the stricter case: the harvestable case, where recorded traffic is exposed. |
| RSA | transport.py:790 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. The scanner did not determine how this key is used, so it takes the stricter case: the harvestable case, where recorded traffic is exposed. |
| RSA | client.py:432 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. The scanner did not determine how this key is used, so it takes the stricter case: the harvestable case, where recorded traffic is exposed. |
| RSA | client.py:433 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. The scanner did not determine how this key is used, so it takes the stricter case: the harvestable case, where recorded traffic is exposed. |
| RSA | transport.py:311 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. The scanner did not determine how this key is used, so it takes the stricter case: the harvestable case, where recorded traffic is exposed. |
| RSA | transport.py:212 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. The scanner did not determine how this key is used, so it takes the stricter case: the harvestable case, where recorded traffic is exposed. |
| RSA | rsakey.py:45 | Act now | X plus Y exceeds Z by 5 years. Nothing can be harvested from a signature, but once the capability exists the key can be forged; X is how long the key must still be trusted. |
| RSA | transport.py:309 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. The scanner did not determine how this key is used, so it takes the stricter case: the harvestable case, where recorded traffic is exposed. |
| RSA | client.py:434 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. The scanner did not determine how this key is used, so it takes the stricter case: the harvestable case, where recorded traffic is exposed. |
| RSA | transport.py:202 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. The scanner did not determine how this key is used, so it takes the stricter case: the harvestable case, where recorded traffic is exposed. |
| RSA | client.py:430 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. The scanner did not determine how this key is used, so it takes the stricter case: the harvestable case, where recorded traffic is exposed. |
| RSA | rsakey.py:184 | Act now | X plus Y exceeds Z by 5 years. Nothing can be harvested from a signature, but once the capability exists the key can be forged; X is how long the key must still be trusted. |
| RSA | rsakey.py:89 | Act now | X plus Y exceeds Z by 5 years. Nothing can be harvested from a signature, but once the capability exists the key can be forged; X is how long the key must still be trusted. |
| X25519 | transport.py:223 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. |
| X25519 | kex_curve25519.py:109 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. |
| X25519 | kex_curve25519.py:45 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. |
| X25519 | kex_curve25519.py:30 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. |
| X25519 | transport.py:332 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. |
| X25519 | kex_curve25519.py:71 | Act now | X plus Y exceeds Z by 5 years. Anything copied today can be read once the capability exists. |
| AES | transport.py:177 | Safe for this horizon | Symmetric key or hash; the known quantum attack (Grover) gives only a square-root speedup. Not a migration target. |
| AES | transport.py:251 | Safe for this horizon | Symmetric key or hash; the known quantum attack (Grover) gives only a square-root speedup. Not a migration target. |
| AES | transport.py:178 | Safe for this horizon | Symmetric key or hash; the known quantum attack (Grover) gives only a square-root speedup. Not a migration target. |
| AES | transport.py:179 | Safe for this horizon | Symmetric key or hash; the known quantum attack (Grover) gives only a square-root speedup. Not a migration target. |
| AES | transport.py:227 | Safe for this horizon | Symmetric key or hash; the known quantum attack (Grover) gives only a square-root speedup. Not a migration target. |
| AES | transport.py:257 | Safe for this horizon | Symmetric key or hash; the known quantum attack (Grover) gives only a square-root speedup. Not a migration target. |
| AES | pkey.py:727 | Safe for this horizon | Symmetric key or hash; the known quantum attack (Grover) gives only a square-root speedup. Not a migration target. |
| AES | pkey.py:691 | Safe for this horizon | Symmetric key or hash; the known quantum attack (Grover) gives only a square-root speedup. Not a migration target. |
| AES | transport.py:233 | Safe for this horizon | Symmetric key or hash; the known quantum attack (Grover) gives only a square-root speedup. Not a migration target. |
| AES | transport.py:176 | Safe for this horizon | Symmetric key or hash; the known quantum attack (Grover) gives only a square-root speedup. Not a migration target. |
| AES | transport.py:239 | Safe for this horizon | Symmetric key or hash; the known quantum attack (Grover) gives only a square-root speedup. Not a migration target. |
| AES | pkey.py:693 | Safe for this horizon | Symmetric key or hash; the known quantum attack (Grover) gives only a square-root speedup. Not a migration target. |
| AES | transport.py:181 | Safe for this horizon | Symmetric key or hash; the known quantum attack (Grover) gives only a square-root speedup. Not a migration target. |
| AES | transport.py:245 | Safe for this horizon | Symmetric key or hash; the known quantum attack (Grover) gives only a square-root speedup. Not a migration target. |
| AES | transport.py:180 | Safe for this horizon | Symmetric key or hash; the known quantum attack (Grover) gives only a square-root speedup. Not a migration target. |
| HMAC | transport.py:188 | Safe for this horizon | Symmetric key or hash; the known quantum attack (Grover) gives only a square-root speedup. Not a migration target. |
| HMAC | transport.py:192 | Safe for this horizon | Symmetric key or hash; the known quantum attack (Grover) gives only a square-root speedup. Not a migration target. |
| HMAC | transport.py:287 | Safe for this horizon | Symmetric key or hash; the known quantum attack (Grover) gives only a square-root speedup. Not a migration target. |
| HMAC | packet.py:47 | Safe for this horizon | Symmetric key or hash; the known quantum attack (Grover) gives only a square-root speedup. Not a migration target. |
| HMAC | transport.py:292 | Safe for this horizon | Symmetric key or hash; the known quantum attack (Grover) gives only a square-root speedup. Not a migration target. |
| HMAC | transport.py:194 | Safe for this horizon | Symmetric key or hash; the known quantum attack (Grover) gives only a square-root speedup. Not a migration target. |
| HMAC | transport.py:191 | Safe for this horizon | Symmetric key or hash; the known quantum attack (Grover) gives only a square-root speedup. Not a migration target. |
| HMAC | transport.py:288 | Safe for this horizon | Symmetric key or hash; the known quantum attack (Grover) gives only a square-root speedup. Not a migration target. |
| HMAC | transport.py:290 | Safe for this horizon | Symmetric key or hash; the known quantum attack (Grover) gives only a square-root speedup. Not a migration target. |
| HMAC | transport.py:293 | Safe for this horizon | Symmetric key or hash; the known quantum attack (Grover) gives only a square-root speedup. Not a migration target. |
| HMAC | transport.py:286 | Safe for this horizon | Symmetric key or hash; the known quantum attack (Grover) gives only a square-root speedup. Not a migration target. |
| HMAC | transport.py:193 | Safe for this horizon | Symmetric key or hash; the known quantum attack (Grover) gives only a square-root speedup. Not a migration target. |
| HMAC | hostkeys.py:300 | Safe for this horizon | Symmetric key or hash; the known quantum attack (Grover) gives only a square-root speedup. Not a migration target. |
| HMAC | transport.py:187 | Safe for this horizon | Symmetric key or hash; the known quantum attack (Grover) gives only a square-root speedup. Not a migration target. |
| SHA256 | pkey.py:401 | Safe for this horizon | Symmetric key or hash; the known quantum attack (Grover) gives only a square-root speedup. Not a migration target. |
SYNTHETIC SAMPLE. Banco Ejemplo is not a real institution and was never a client.
Yours
That was the invented bank.
The same method with your inventory in place of this one. Our target is 72 hours from access; scope and terms are agreed before anything is shared.