> You're basically describing a one-time-pad. So, if you use a new random
> V2 for each V1, this is unbreakable, but as soon as you re-use a V2 for
> a second V1, it's easily broken (just like the OTP is if a key is
> re-used).
>
> So, unless your suggesting to use this scheme as an OTP, in which case
> there is no need for encrypting the plaintext to V1 in the first place,
> this scheme just adds a meaningless extra layer on the underlying
> encryption scheme that generates V1 from the plaintext. How is this done
> anyway? You skipped that part in your post.
This seems to be the case. The only sensible way I thought it could be
implemented is with modular addition and subtraction, which is
basically a one time pad.
You could possibly use this with a key derivation function to make new
keys for each block based on a real key and counter, but then you
could just take that KDF and xor it with your block to use it as an
OTP.
This cipher feels like xor with extra steps.
For reference, here's some output I get with 8D vectors and 32-bit
values.
Plaintext b'Hello world, and all its people.'
V1 (plaintext): (1214606444, 1864398703, 1919706156, 543256164,
543255660, 543782003, 544236911, 1886151982)
V2 (key): (745555363, 1887577460, 174688883, 1987969223,
3504861512, 1186523942, 3680487385, 167527441)
V3 (ciphertext): (1960161807, 3751976163,
2094395039, 2531225387,
4048117172, 1730305945, 4224724296,
2053679423)
V3 - V2 (plaintext): (1214606444, 1864398703, 1919706156, 543256164,
543255660, 543782003, 544236911, 1886151982)
V3 - V2: b'Hello world, and all its people.'
--
Leo