|Alice's ephemeral public key, Alice's static public key, Ciphertext, ECDSA's tag, MAC's tag|
is wrong if we are making ECIES, as explained in 2. That should be[Alice's ephemeral public key || Ciphertext || HMAC's tag]
, per 5.1.3 Action 9 (with the necessary conversion from public key to bytestring implicit), yielding the output of ECIES, which isECIES(Bob's public key, M || ECDSA(Alice's static private key, M))
of 1.I fail to parse "this is secure as sign-encrypt-sign". Leaving aside "secure as", it does not hold. With the changes indicated, it is made sign-then-encrypt, which is secure. Without the change, this is sort of encrypt-then-sign-plus-MAC-of-the-symmetric-part-of-the-ciphertext-and-include-that-in-the-MACed-data, the encryptionthis is not ECIES, and while I do not immediately see any attack, that's not a valid indication of security.
"I am not sure that MAC's tag is necessary in this scheme": the MAC is necessary at least for the encryption to be what's named ECIES, and to benefit of its security argument. It also serves as a protection against poor implementations on the receiving side.
In
ECDSA's tag = ECDSA(Alice's public key || Ciphertext || Kmac, Alice's static private key)
, again I do not see whyAlice's public key
is part of what's signed; andCiphertext
is an internal variable of ECIES, which is dubious.It can be understoodA reading of the question is that an entityAlice reuses the same private key for ECDSA signature and ECIES decryption, which conceivably could have security implication. Formally, it makes ECIES's security argument invalid, and is explicitly against the ECDSA specification in FIPS 186-4:
Summary: The alternative proposed essentially replaces ECIES's MAC with an ECDSA signature (with ECIES's MAC key entering the data signed), and makes a number of other variations of the standard ECIES (at least, including the public key, and hashing the whole ephemeral public key rather than its $x$ coordinate). That's functionally encrypt-then-sign, with something that is not exactly ECIES and does not benefit from its security proof (though I see no attack). Beware however than any encrypt-then-sign reveals the identity of the signer, when the question started with the equation of sign-then-encrypt with ECIES, which demonstrably keeps the identity of the signer confidential until decryption. The question states that it performs sign-encrypt-sign, when it appears that it does not (unless Message
is assumed to be M || ECDSA(Alice's static private key, M)
). The question does not state use of separate key pairs for signature and encryption, as required by standards and the security argument of ECDSA and ECIES.