Hi Friedrich

I totally agree with 1) and 2): that kind of implementations would be
very appropriate and valuable to have in Sage. Concerning 3), I would
initially think that doc-tests could be sufficient.

I was loosely involved in some discussions on implementing the McEliece
public-key crypto-system #21352
(https://trac.sagemath.org/ticket/21352) which has since stalled since
the author left it. From there I remember that we noticed some
crufty-ness to the code in sage/crypto. For instance, though there is a
base-class Cipher, it doesn't have abstract methods for encrypting and
decrypting; as a result, it seems that different words has been used for
this all over (at least "enciphering", "encode", "encrypt"). The
existing PublicKeyCipher in sage/crypto/cipher.py is also sort of weird:
e.g. it inherits key() from Cipher, but in the only current
implementation - Blum-Goldwasser class - there is instead public_key()
and private_key(). Perhaps some cleanup and redesign is appropriate
here.

I really don't know about 4). If researchers and teachers find that
they can use a modular, high-level implementation of certain protocols,
then why not? But as with the ciphers themselves, the aim shouldn't be a
competitive, highly optimised implementation, I think, but rather
something that eases understanding and experimentation.

Best,
Johan



Friedrich Wiemer writes:

> Today I stumbled across https://trac.sagemath.org/ticket/11565 in where the 
> design of the crypto module is briefly discussed ...
>
> 1) While RSA might be not the best cipher to point out the following, this 
> certainly holds for block ciphers or other crypto primitives. During my 
> research work I often implement some cipher scheme in python from scratch, 
> because I want to tinker with it, maybe exchange some parts of it, etc. 
> Having these things in sage with a highly modularized design would really 
> ease this kind of work.
>
> 2) Having all the heavy mathematic stuff in sage, we can easily provide 
> implementations of, say, AES that are in fact their mathematical 
> descriptions. I think Rusydi H. Makarim already started working on this. In 
> my opinion, this has at least two advantages: First it is a great 
> educational tool for students to see, how this math "works in real" and 
> helps them in getting a better understanding whats actually going on. 
> Second it would allow to have a collection of reference implementations, 
> which (because of the above modularized approach) allow to easily generate 
> also intermediate test vectors. For me, this last point is really a big 
> plus, because often you only get "coarse-grained" testvectors from cipher 
> specifications like input/output of the whole encryption (sometimes also 
> intermediate results after a single round or so) - but I have never seen a 
> specification, which also provides intermediate results after the inner 
> parts of a round function or so. If you want to implement some optimized 
> version, you might be very happy, to have such test possibilities at hand.
>
> 3) So, from the end of point 2: It would also be nice, to have a lot of 
> test vectors for crypto schemes - maybe its already enough to have these in 
> the doctests, at least this would be a nice starting point.
>
> 4) This last point is somewhat of an abstraction above point 2, combined 
> with 1. Going a level up, to the crypto-protocol level, it would be quite 
> easy to implement protocols like TLS when all the basic crypto stuff is 
> readily available. I was told that there is no free TLS implementation in 
> python available, where you are actually able to exchange parts of the 
> protocol (this again might be interesting if you are doing research on such 
> a protocol). Regarding this point, I'm not sure if sage is the right place 
> to have such a protocol level implementation, because its main aim seem to 
> be a mathematical CAS.
>
> What are your opinions regarding this?

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To post to this group, send email to sage-devel@googlegroups.com.
Visit this group at https://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/d/optout.

Reply via email to