I'll go ahead and ask, how long do you think such a back door would stay unnoticed, let alone survive? I'm considering the fact that we have a lot of people looking at our code, just judging from the issues and pull requests raised on github. I can't say that I have an actual answer, but it's a question worth asking as well, to see if the T.O.L.A. Act is worth a state of panic or not. Cheers, Richard ( who's on vacation and should stop reading these mails ) In message <11EDC036-87D3-4757-AD33-80C6E608F77F@xxxxxxxxxxxx> on Tue, 1 Jan 2019 01:27:53 +1100, "openssl@xxxxxxxxxxxx" <openssl@xxxxxxxxxxxx> said: > Matt et al > > 'been reviewed and approved by two current OpenSSL committers (one of whom must > be on the OpenSSL Management Committee).’ > > Due to the recent legislative changes here in Australia around the T.O.L.A. Act, can a change be > made to the OpenSSL policy so that the 2 reviewers, don’t reside in Australia, or are Australian > citizens ? > > ABI/API changes -> breaks -> back door requests…. > > -- > > Regards, > > Mark A. Lane > > Cryptopocalypse NOW 01 04 2016 > > Volumes 0.0 -> 10.0 Now available through iTunes - iBooks @ > https://itunes.apple.com/au/author/mark-a.-lane/id1100062966?mt=11 > > © Mark A. Lane 1980 - 2019, All Rights Reserved. > © FooCrypt 1980 - 2019, All Rights Reserved. > © FooCrypt, A Tale of Cynical Cyclical Encryption. 1980 - 2019, All Rights Reserved. > © Cryptopocalypse 1980 - 2019, All Rights Reserved. > > On 1 Jan 2019, at 01:11, Matt Caswell <matt@xxxxxxxxxxx> wrote: > > On 31/12/2018 11:36, C.Wehrmeyer wrote: > > On 31.12.18 10:12, Richard Levitte wrote: > > Yes, it's true, new features are going in. And it's true that it's > often more exciting to add new features than to do the janitorial > work. > > You realised what I have left unspoken thus far, which is this almost > obsession-like preference of OSS coders to add new features rather than > improving the old, boring codebase. However, there's a reason why it's still > called code*base*. It's the base of everything. And adding more and more > features to that base is going to make ripping off the band-aid more painful in > the long run. > > There has been a huge amount of effort put in over the last few years to improve > the codebase. Things that immediately spring to mind (and there's probably a > whole load more): > > - Rewrite of the state machine > - libssl record layer refactor > - Implementation of the PACKET and WPACKET abstractions in libssl > - Rewrite of the rand code > - Implementation of the new test harness > - Significant effort into developing tests > - Implementation of the coding style and reformat of the codebase to meet it > - Opaque many of the structures (which I know you don't see as an improvement, > but I'll answer that point separately) > - Implementation of continuous fuzzing > - Significant expansion of the documentation coverage > > It is simply not true to claim that we have "an obsession-like preference...to > add new features rather than improving the old, boring codebase". None of the > above things resulted in or were motivated by user visible features. They were > all about improving the codebase. > > Also, infrastructure again. I, as a user, don't care if the kernel gets a new > feature that makes some black magic happening. What I care about is that the > kernel doesn't throw away my writes (which has happened in May of 2018, see): > > https://www.postgresql.org/message-id/flat/CAMsr%2BYE5Gs9iPqw2mQ6OHt1aC5Qk5EuBFCyG%2BvzHun1EqMxyQg%40mail.gmail.com#CAMsr+YE5Gs9iPqw2mQ6OHt1aC5Qk5EuBFCyG+vzHun1EqMxyQg@xxxxxxxxxxxxxx) > > > Cryptography libs should be equally conservative, considering that cryptography > is conservative to begin with. I don't care if TLS 1.3 lets me use new exiting > ciphers and handshakes when it unreasonably bogs down my server code. > > BUT, you also have to appreciate that stuff is happening around us > that affects our focus. TLS 1.3 happened, and rather than having to > answer the question "why don't you have TLS 1.3 yet?" (there's a LOT > of interest in that version), we decided to add it. > > Sure, but didn't Matt just say that there are a lot of volunteers working on > that library? The disadvantage here is that quality assurance is barely a thing > - however, the *advantage* of this is that OpenSSL does not have to follow > commercial interests. If we look at this at face value you could just say "No, > people, it's high time we streamline some of the internal aspects of the > library, TLS 1.3 will have to wait. You can't wait that long? Well, sorry". > > However, your message is clear, we do need to do some cleanup as > well. More than that, I agree with you that it's needed (I've > screamed out in angst when stumbling upon particularly ugly or > misplaced code, so the feeling is shared, more than you might > believe). > > But what does "cleanup" entail? That's the hot-button question here. I've > already made a suggestion, that is to say, getting rid of opaque structures. If > that is deemed too insecure (for whatever reasons), export symbols that allow > programmers to query the size of structures, and provide two versions of > functions: one function expects the caller to pass an object to which the > changes are to be made, and the other one allocates the necessary memory > dynamically and then calls the first version. Or just don't allocate my object > memory dynamically anymore. > > That being said, cleanup happens, and documentation happens, in a > piecemeal fashion, 'cause that's what most people have capacity for. > > So, what you're effectively saying is that I'm the first one who ever asked for > SSL object reuse, right? Because if piecemeal work happens on the documentation, > and Viktor says that it's possible, then surely no one would have ever answered > that question on the mailing list and *not* put it piecemeal-ly in the OpenSSL > documentation, right? > > Now, here's something else that you need to consider: API/ABI > compatibility needs to be preserved. > > No it doesn't. We *know* it doesn't. When OpenSSL 1.1 was released it broke all > *sorts* of applications out there, because all sorts of applications used struct > fields rather than accessors. wget, mutt, neon, python, you name it, you broke it. > > API/ABI stability is absolutely required. Every time we make a breaking change > it is painful for our users - and more pain is felt the bigger the scale of the > break. We simply cannot go around making wholesale breaks on an ongoing basis. > If we did so then OpenSSL would be a lot less useful to our users. > > This is not to say that we can *never* make breaking changes. Only that when we > do so it must be strongly justified and only done relatively infrequently. We > made such a decision when we decided to make the structures opaque. It's not a > decision we are likely to repeat anytime soon IMO. We are still feeling the pain > of that now (and will continue to do so for at least the next year until 1.0.2 > goes out of support - and probably beyond that). > > Which brings me onto why structures were made opaque in the first place. A > significant driver for this (probably *the* most important one) was to improve > the codebase. I have witnessed first hand the harm that non-opaque structures > did to OpenSSL. We will be fixing the fallout from them for years to come. > Non-opaque structures combined with the requirements for stable API/ABI means > you cannot change anything in those structures. Renaming or deleting structure > members constitutes an API break. Even *adding* structure members constitutes an > ABI break (due to the changed size of the structure). This means the code > ossifies over time and cannot easily be refactored. Much of OpenSSL's internal > "quirkiness" results from attempting to work around this restriction. > > Things like the state machine refactor and the record layer refactor would not > have been possible without opaque structures. In my mind making the structures > opaque was one of the best things that ever happened to OpenSSL. > > https://breakpoint.cc/openssl-1.1-rebuild-2016-08-26/ > > So since when do we need to consider API/ABI compatibility? Did we grow up > recently? > > Or maybe OpenSSL should have switched the language. The point of C is that > structures are public. And if I'm going to be honest that approach saved my > sorry arse more than a couple times. When zlib choked because it couldn't go > past 4 GiBs of data since its fields were uint32_ts, I was able to easily > workaround this problem. But what do I know. > > If you really want to fiddle with OpenSSL internal structures - feel free. Just > include the OpenSSL internal header files and away you go. Just do so in the > knowledge that they could be changed at any time, and your code might break. If > this isn't a concern to you then - no problem. If it is a concern to you - then > actually you *do* care about API/ABI stability after all. > > Counting symbols is, however, nothing other than a blunt instrument. > Quite a lot of those symbols are convenience macros and functions that > have accumulated over time. > > You're taking my statement out of context. Counting the symbols wasn't supposed > to suggest that there are too *many* of them. I'm in no position to say that, > seeing as the original context in which my statement was put is that *I'm not > familiar enough with the library*. > > What I said was that reading the code is easy. Learning what the library > provides is hard, and that you won't learn much just by looking at the symbols > because there's so many of them. > > But nevertheless, I do hear you call for a remake of the SSL API as > well as cleaner internals. The latter is easier, and I'm sure it will > happen piecemeal as per usual so as to not break something / > inadvertently change a behavior (i.e. break ABI). The former is a > fairly massive project, and is more of creating a new API and library > rather than a mere cleanup job. That will be a massive effort, and > you do have to keep in mind how much time all involved can put into > it. > > I'm not saying it needs to be done right now. I'm merely suggesting that it > might be a good goal post for OpenSSL 2.0. > > Turning structures opaque doesn't prevent people from still messing > with their internal fields. > > True. But it makes for a clear delineation where people are forced to > be aware that they are playing with internal stuff, and that it may > not be a safe thing to do. > > Then why not provide small helper functions for covering the "playing with > internal stuff" part? That way it's still controlled, and documented, and > unified. You guys must've had some examples to show off in order to justify the > process, so surely you know what it is that people do when they use internal > stuff. Make functions for those. Don't give them any reason to continue playing > with internal stuff. > > I don't like code that tries to protect programmers from themselves. I like code > that lets good programmers do smart things. And if bad programmers use that > freedom to do bad stuff, then doesn't that mean your API simply didn't support > this, and they had to make it work somehow else? Again, helper functions. > > Uhmmmm.... this is factually incorrect. OpenSSL doesn't use its own > memory pooling. We have thin wrappers around the usual malloc() / > realloc() / free(), which allows any application to do its own memory > pooling. > > https://web.archive.org/web/20150207180717/http://article.gmane.org/gmane.os.openbsd.misc/211963 > > > The BUF_FREELISTS code that this post references was ripped out years ago. This > no longer represents the current state of OpenSSL in any supported version. > > To conclude, I have a question for you: are you only willing to rant > (*), or are you willing to help out in another way? > > This is not the question I feel you should ask because we haven't even > established if I *could* make contributions to the project, as my mindset > appears to be so much more different. Especially the idea of not wanting to > break APIs/ABIs is a huge limitation - just looking at SSL_new() made me give up > hope here. > > Yes - not breaking APIs/ABIs is a huge limitation. BoringSSL is not suitable for > general purpose use precisely because of this. The only users BoringSSL cares > about whether they break or not are Google users. As soon as you have a library > that wants to cater for large numbers of users (which we do) then you have to > accept that limitation. > > As to whether or not we have established whether you *could* make such > contributions - I think you are missing the point. We cannot know whether you > are capable or not until you try. It is on the basis of your code that we would > make such a judgement. In order for your code to get into OpenSSL it must have > been reviewed and approved by two current OpenSSL committers (one of whom must > be on the OpenSSL Management Committee). We invite anyone to contribute. In > order for this to be a healthy open-source community we *need* those > contributions. Only those that make the grade will make it in. > > Note - this review process wasn't always the case. Things used to be much more > informal in pre-heartbleed days. This is no longer the case. > > I'm no cryptography expert, I've made that clear from mail one, and my cleanup > jobs would be more widespread than what seems to be deemed acceptable right now. > I can read and write scalable C code, otherwise I wouldn't even have tried to > reuse that SSL object from the beginning. > > So, I ask a question in return: what do you think I *could* be helping with? > > Well, you have vocally complained about the state of the documentation. You have > the benefit of being a new OpenSSL user. You know what things were confusing or > unclear in the documentation. More experienced OpenSSL coders often don't have > the perspective - because some things are just "obvious" to them. So help with > pull requests to improve the documentation. > > Matt > -- > openssl-users mailing list > To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-users > -- openssl-users mailing list To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-users