I want to make an ecryption algorithm that is secure in, well, really many ways, which is hard I see, so I came up with some ideas of how to implement it using some primitives that I know and I actually discovered some online that resemble it, but I thought it's time to consult the forum about it.
Firstly I should define my goal. All participants have their private and public keys. Communication has to be possible without any pre-made deal (no secret, symmetric keys). This is not negligible because of another property... Basically, I want participants who find messages directed to them, randomly, unexpectedly, to still be able to decrypt them while preserving all security levels.
Let's say we have S, the sender, and R, the receiver. When I say someone "can't", I mean that they still may ask questions and guess in way and in amount as described for IND-CCA2. I am differentiating information about the ends of plain- or cipher-text, from any other information about them (that being contents, and which I will refer to as info about plaintext). Knowing contents is stronger in sense that I would allow anyone to deduce at least something about the ends, if they know at least something about the content. I would like these properties:
- Only R can distinguish the ciphertext from random noise.
- Only S can generate a correct ciphertext.
- Only R can decrypt.
- Only S can encrypt.
- Only R and S can distinguish the ciphertext from random noise, given the plaintext.
- Given a ciphertext with corrupt bits in the middle of some stream of random data, nobody can learn any info about the ends of the ciphertext, or any info about the plaintext.
- Given a ciphertext with corrupt bits at the beginning or the ending of some stream of random data, nobody can learn any info about the other end of the ciphertext, or any info about the plaintext.
- Given a ciphertext with corrupt bits, knowing both of its ends, nobody can learn any info about the plaintext.
- Given a correct ciphertext at the beginning of some stream of random data, only R can (and that efficiently, in linear time) find the end of the ciphertext, and no one else can do it.
- The difference between lengths of ciphertext and plaintext is constant.
It is ok if you can tell me about some cryptosystem that provides some and maybe not all of these properties. Maybe I can figure out how to finish it. And it is ok to add your own interpretation of the difference of infos about the ends and plaintext.
I would need some time to translate to English my files with my current ideas of algorithms, but there is barely anything. I noticed OAEP++ and saw some similarities to my ideas, but that's all. I am constantly failing to hold so many details in my head...
Here is my attempt.