A logistics company is designing a courier mobile app that must send a one megabyte signed manifest to a backend API many times per minute over mobile networks. The cryptography lead wants confidentiality, integrity, and sender authentication, but is worried about CPU drain on low-end Android handsets. Which cryptographic design best meets the performance and security goals?
- AEncrypt the entire manifest with the backend's RSA-4096 public key and append an RSA signature over the ciphertext, on the grounds that asymmetric algorithms give the strongest guarantees end to end.
- BEncrypt the manifest with AES-256-ECB using a key derived from the courier's device PIN, then HMAC the ciphertext with the same key so that anyone with the PIN can both verify and decrypt the manifest.
- CSend the manifest in cleartext over TLS and rely solely on the server certificate to authenticate the backend, on the assumption that TLS already provides end-to-end signing of every request body for both sides.
- DEncrypt the manifest with AES-256-GCM using a per-message symmetric key, wrap that key with the backend's RSA-OAEP public key, and sign the ciphertext with the courier's ECDSA private key on a P-256 curve. Correct
Why A is wrong: Bulk encrypting a one megabyte payload directly with RSA is operationally impossible because RSA can only encrypt blocks smaller than its modulus, and even chunked it is orders of magnitude slower than symmetric ciphers, so handset CPUs and batteries would suffer badly while gaining no extra security.
Why B is wrong: ECB mode leaks structure across identical plaintext blocks and is unsuitable for any non-trivial data, deriving a key from a low-entropy PIN gives a small brute-force space, and reusing one key for both encryption and authentication on the courier side gives no sender authentication for the backend at all.
Why C is wrong: TLS protects the transport hop and authenticates the server, but it does not produce a portable signature over the application payload that ties a specific courier identity to a specific manifest, so it fails the sender authentication and non-repudiation requirement the lead has set out.
Why D is correct: This is the standard hybrid pattern: AES-GCM provides fast authenticated symmetric encryption suited to bulk data, RSA-OAEP safely transports a fresh per-message key to the backend without a shared secret, and ECDSA on P-256 gives compact, low-CPU sender authentication, hitting confidentiality, integrity, and non-repudiation on modest hardware.