Hi Ben,

Unfortunately OpenPGP is more or less the canonical example of
something we would _not_ want to offer as a recipe. Going back to my
original criteria:

* It should comprehensively address a common use case: It may do this.
* It should reflect current (and anticipated future) best practices:
It absolutely does not do this, PGP has been extremely laggard in
adopting things like AEADs, and most implementations have indefensible
defaults like using CAST5 for encryption.
* It should be misuse-resistant: PGP is not misuse resistant, in fact
there are legions of papers on how users are incapable of using it
correctly.
* It should reflect an external standard so that we can interoperate
with other libraries and ecosystems: This is true!
* It should be parameter-free: PGP has innumerable configuration
options and knobs.

You've noted that one _library_ offers PGP with a preset options, but
this is not the same as the standard and ecosystem as a whole being
misuse resistant and parameter free.

Alex

On Wed, Jun 26, 2024 at 4:41 PM Benjamin W. Portner
<webmas...@benjamin-portner.de> wrote:
>
> Hi Alex,
>
> Let me try again: How about PGPy's encryption implementation
> (https://github.com/SecurityInnovation/PGPy/blob/master/pgpy/pgp.py#L1189)?
> It is based on the OpenPGP standard, it can be used without additional
> parameters (which prevents misuse), and it addresses a common use case
> (message encryption).
>
> Cheers,
>
> Ben
>
> On 25-Jun-24 00:09, Alex Gaynor wrote:
> > Mis-use resistant means that it should be impossible (or as close as
> > is practicable) for developers to misuse the APIs. Put another way:
> > it's never acceptable to say that a system is insecure because a
> > developer was holding it wrong. (c.f.
> > https://www.wired.com/2010/06/iphone-4-holding-it-wrong/).
> >
> > In terms of what a standard means: it means there needs to be an
> > external reference that other people can use to implement it and
> > articulates what the goals are, what the security properties are, and
> > how to implement it. https://github.com/C2SP/C2SP is an effort to
> > build a community repository of such specifications.
> >
> > The fact that something is widely used is not, by itself, sufficient
> > for us to treat it as a standard.
> >
> > Alex
> >
> > On Mon, Jun 24, 2024 at 5:42 PM Ben Portner via Cryptography-dev
> > <cryptography-dev@python.org> wrote:
> >> Hi Alex,
> >>
> >> thanks for your swift reply. Let me try to map your conditions to the 
> >> Ansible implementation:
> >>
> >> * It should comprehensively address a common use case
> >>
> >> Check. Use case is encryption of sensitive data, such as passwords, in 
> >> version control systems.
> >>
> >> * It should reflect current (and anticipated future) best practices
> >>
> >> As a cryptography noob I am not sure about this one. Someone else would 
> >> have to analyze the implementation.
> >>
> >> * It should be misuse-resistant
> >>
> >> Not entirely sure what misuse refers to here. It cannot be used by crypto 
> >> gangs? User errors are minimzed? The latter would be a check.
> >>
> >> * It should reflect an external standard so that we can interoperate with 
> >> other libraries and ecosystems
> >>
> >> Ansible's vault implementation follows no existing standard. However, 
> >> Ansible is the most widely used config management tool so vault could be 
> >> called a de-facto standard by transitive properties?
> >>
> >> * It should be parameter-free
> >>
> >> Check.
> >>
> >>
> >> It seems that Ansible checks most of the boxes. What do you think? Is this 
> >> enough to include Ansible's vault implementation in the recipes section?
> >>
> >> - Ben
> >>
> >>
> >> On 21-Jun-24 16:03, Alex Gaynor wrote:
> >>
> >> Hi Ben,
> >>
> >> We are interested in having more cryptographic recipes, however we
> >> have a number of things we want from a recipe:
> >>
> >> * It should comprehensively address a common use case
> >> * It should reflect current (and anticipated future) best practices
> >> * It should be misuse-resistant
> >> * It should reflect an external standard so that we can interoperate
> >> with other libraries and ecosystems
> >> * It should be parameter-free
> >>
> >> Unfortunately there's been a real dearth of standardization of these
> >> types of recipes in the cryptographic world. I continue to hope that
> >> more will come into existence, and we'll add support for them though!
> >>
> >> Alex
> >>
> >> On Fri, Jun 21, 2024 at 9:56 AM Ben Portner via Cryptography-dev
> >> <cryptography-dev@python.org> wrote:
> >>
> >> Dear Cryptography Developers,
> >>
> >> First off, thank you for developing the Cryptography package! The Python 
> >> developer community is growing and robust cryptography is desperately 
> >> needed to have a safe fundament to build on.
> >>
> >> TL;DR: Are more cryptographic recipes (AES256, KDF incl. parameter 
> >> storage) going to come soon?
> >>
> >> In your package description you write that "cryptography is a package 
> >> which provides cryptographic recipes and primitives". As a developer and 
> >> cryptography noob, I am especially interested in the recipes. In your 
> >> docs, there are code snippets for the Fernet algorithm, which are very 
> >> helpful. I am wondering if you are planning to expand this section in the 
> >> near future. For example, I would be interested in learning how to store 
> >> the key derviation parameters (salt, length, rounds) with the encrypted 
> >> cipher text to facilitate decryption later on. Also, a version with 256 
> >> bit keys would be interesting. I believe that such a "reference 
> >> implementation" would also benefit other developers. Ansible already uses 
> >> Cryptography for its vault implementation, however with "only" 10k rounds 
> >> for the KDF. As a cryptography noob, I am not sure if this is safe enough 
> >> for my application (archive encryption for offsite backups). Having a 
> >> "first hand" implementation with safe defaults would help to reduce 
> >> developer uncertainty and also prevent us from "reinventing the wheel".
> >>
> >> Thanks again and best regards.
> >>
> >> Ben
> >>
> >> _______________________________________________
> >> Cryptography-dev mailing list
> >> Cryptography-dev@python.org
> >> https://mail.python.org/mailman/listinfo/cryptography-dev
> >>
> >>
> >> _______________________________________________
> >> Cryptography-dev mailing list
> >> Cryptography-dev@python.org
> >> https://mail.python.org/mailman/listinfo/cryptography-dev
> >
> >



-- 
All that is necessary for evil to succeed is for good people to do nothing.
_______________________________________________
Cryptography-dev mailing list
Cryptography-dev@python.org
https://mail.python.org/mailman/listinfo/cryptography-dev

Reply via email to