+ 1 (non-binding). The latest one looks good to me! Thanks, Gidon! On Thu, Oct 25, 2018 at 4:17 PM Ryan Blue <[email protected]> wrote:
> Thanks, Gidon! I'll have a look as soon as I get some free time. > > On Thu, Oct 25, 2018 at 6:20 AM Gidon Gershinsky <[email protected]> wrote: > > > Ryan, > > > > Your suggestions have been addressed, please check out the > > https://github.com/apache/parquet-format/pull/114/files > > > > Cheers, Gidon. > > > > > > ---------- Forwarded message --------- > > From: Gidon Gershinsky <[email protected]> > > Date: Tue, Oct 23, 2018 at 10:32 AM > > Subject: Re: [VOTE] Modular Encryption design sign-off > > To: <[email protected]> > > > > > > Regarding the EncryptedColumnChunk, we might be talking about two > different > > things, looks like we need a deeper tech dive to sync up and get to the > > bottom of this. > > I'll <> send you a separate mail on this subject, but no doubt we'll > > figure it out one way or another. > > > > It is the only discussion point we have left, since all other suggestions > > sound good to me - the md doc can certainly use a substantial addition of > > explicit details for every feature > > of the encryption format, to make it a full specification document. > > > > Cheers, Gidon. > > > > On Mon, Oct 22, 2018 at 9:36 PM Ryan Blue <[email protected]> > > wrote: > > > > > Using a new magic string (PARE) for files with a plaintext footer would > > not > > > allow legacy readers to parse these files. > > > This should be clear from reading the spec. I see that the plaintext > > footer > > > section states “Then the footer is written as usual, followed by …, > and a > > > final magic string, ‘PAR1’” but, like the other section, this is not > > > clearly called out and nothing states that this is applies to the > header > > > magic as well. The spec needs to include a statement like “the magic > > bytes > > > for plaintext footer mode are ‘PAR1’ to allow older readers to read > > > projections of the file that do not include encrypted columns”. > > Similarly, > > > the other section needs to clearly state what the magic string is for > > > encrypted footers. > > > > > > Support for multiple encryption algorithms is one of the > differentiating > > > features of Parquet encryption, therefore having a second cipher > upfront > > is > > > significant. > > > > > > That sounds okay to me since CTR is a subset of GCM so it isn’t that > > large > > > of a change. The spec does need to be explicit about exactly how the > two > > > relate. For example, CTR resources tend to use the term “nonce” where > GCM > > > uses IV, so it needs to be explicitly stated that the GCM IV is used as > > the > > > CTR nonce. > > > > > > EncryptedColumnChunk structure will be identical to a ColumnChunk. The > > > reasons are: … > > > > > > These structures should be defined in the encryption spec. Some details > > can > > > be included by reference, like “the remaining fields match those in > > > ColumnMetaData” but there isn’t enough information in the current spec > > > draft. > > > > > > My point about file_offset is that this field already has a use and a > > > definition and this spec should not change its use or purpose. If you > > need > > > a field for the location of an encrypted ColumnMetaData, then > > > EncryptedColumnChunk should add one. > > > > > > EncryptedColumnChunk structure will be identical to a ColumnChunk. … > > > ColumnCryptoMetaData is needed in ColumnChunk > > > > > > How is EncryptedColumnChunk identical to ColumnChunk if it also > includes > > an > > > extra structure for crypto? > > > > > > There are no options 1,2 in the NIST spec section 8.2.2. > > > > > > I’m referring to this section: “The random field shall either consist > of > > 1) > > > an output string of r(i) bits from an approved RBG with a sufficient > > > security strength, or 2) the result of applying the r(i)–bit > incrementing > > > function to the random field of the preceding IV for the given key” > > > > > > My main point is that reusing any IV with the same key is a problem. > The > > > spec must explicitly state that no IV can be used with the same key. > > Sounds > > > like you’re confident that the approach you’re using is sufficient, but > > if > > > it isn’t stated in the spec then other implementations might do it > > > incorrectly. Referencing section 8.2.2 or relying on other people > having > > > knowledge that you do is not sufficient for a spec. > > > > > > I also have a minor concern over the amount of crypto random that this > > may > > > require because Parquet requires so many encryption streams, but that’s > > an > > > implementation detail and doesn’t need to block the spec. > > > > > > On Sat, Oct 20, 2018 at 2:22 AM Gidon Gershinsky <[email protected]> > > wrote: > > > > > > > Ryan, > > > > > > > > Thank you for the clear and detailed feedback. > > > > > > > > 1. Using a new magic string (PARE) for files with a plaintext footer > > > would > > > > not allow legacy readers to parse these files. > > > > > > > > 2. Support for multiple encryption algorithms is one of the > > > differentiating > > > > features of Parquet encryption, therefore having a second cipher > > upfront > > > is > > > > significant. > > > > The design/review overhead of adding a CTR-based cipher to GCM is > > > minimal. > > > > In fact, CTR is a subset of GCM, because the latter is built on CTR > > (and > > > > GMAC). > > > > Since you explicitly mark your suggestion as a minor note, I propose > we > > > > keep this part unchanged. > > > > > > > > 3. EncryptedColumnChunk structure will be identical to a > ColumnChunk. > > > The > > > > reasons are: > > > > - In both EF and PF modes (encrypted/plaintext footer), the > > > ColumnMetaData > > > > is not always separated. > > > > It is kept inside ColumnChunk if the column is plaintext, or > encrypted > > > > with the footer key in the EF mode. No reason to separate it then. > > > > - ColumnCryptoMetaData is needed in ColumnChunk to support column > > > > encryption in PF mode (and in EF mode). > > > > - We can make the file_offset an optional field. But actually it is > not > > > set > > > > anyway in today's Parquet, which works only with the optional > meta_data > > > > field. So, this reason alone shouldn't be enough to create a new > Thrift > > > > structure that fully replicates an existing one, save for optional vs > > > > required classifier in one field. > > > > > > > > 4. There are no options 1,2 in the NIST spec section 8.2.2. This > > subject > > > > had been extensively discussed by community during the design review: > > > > - If you mean the free field option there - its inapplicable for the > > > 96-bit > > > > IV we are using. > > > > Per the spec, 96-bit IV is fully random, 0 free field length. 96 bit > > is a > > > > recommended length for AES-GCM IV, see discussion at > > > > > > > > > > > > > > https://crypto.stackexchange.com/questions/41601/aes-gcm-recommended-iv-size-why-12-bytes/41610 > > > > eg "*For GCM a 12 byte IV is strongly suggested as other IV lengths > > will > > > > require additional calculations.*" > > > > - If you mean the 8.2.1 section, with deterministic construction > > option - > > > > its highly problematic, since deterministic IV prefix ("fixed field") > > > > "*shall > > > > identify the device, or, more generally, the context for the instance > > of > > > > the authenticated encryption function*". This is not trivial in a > > single > > > > process, and even more challenging in distributed frameworks like > Spark > > > > ("*no > > > > two distinct devices shall share the same fixed field*"). Moreover, > > this > > > > can be unsafe - a mistake in prefix creation can lead to identical > IVs > > - > > > > which breaks the encryption. > > > > - The good news is we don't need these complications. The 8.2.2 > allows > > us > > > > to have 4 billion random IVs for a single key before any collision > > would > > > > happen in IVs that are open to attackers. With Parquet modular > > > encryption, > > > > the number is more like 400 billion, because most (>99%) of IVs are > > > hidden > > > > from an attacker - their offset is encrypted with the column/footer > > keys. > > > > Of course, we use the SecureRandom class, seeded properly. > > > > - Besides checking the NIST spec and crypto forums, I work directly > > with > > > > cipher technology experts - who confirm the Parquet approach to IV > > > > generation is the right thing to do in distributed systems. > > > > > > > > > > > > All other suggestions sound good, and are not hard to add to the > spec. > > > I'll > > > > update the document accordingly. > > > > > > > > Cheers, Gidon. > > > > > > > > On Fri, Oct 19, 2018 at 7:38 PM Ryan Blue <[email protected] > > > > > > wrote: > > > > > > > > > After thinking about this more last night, I think it also needs to > > be > > > > more > > > > > careful around IV generation. The spec just says that > implementations > > > > > should use RBG-based IV construction, but it needs to be more > > explicit > > > > that > > > > > no two GCM streams use the same IV. If an IV is reused, then there > > is a > > > > > possible plaintext leak when blocks are padded with a predictable > > > > pattern. > > > > > > > > > > I think the spec should state that an initial IV should be > generated > > > > using > > > > > secure random as described by 8.2.2 option 1 and the IV for each > > > > encrypted > > > > > stream should be generated using 8.2.2 option 2 until there is a > > > > collision, > > > > > when the base IV should be regenerated using 8.2.2 option 1. That > > will > > > > > ensure that each IV is unique, but that Parquet doesn't consume a > > huge > > > > > amount of crypto randomness. > > > > > > > > > > rb > > > > > > > > > > On Thu, Oct 18, 2018 at 6:15 PM Ryan Blue <[email protected]> > wrote: > > > > > > > > > > > -1 > > > > > > > > > > > > - I don’t think that it contains enough information for > someone > > to > > > > > > successfully implement the proposal. For example, this > > references > > > > > thrift > > > > > > structures like AesGcmV1 and AesGcmCtrV1, but doesn’t > introduce > > > them > > > > > and > > > > > > explain what they are or detail what they contain. Similarly, > > > > > > ColumnCryptoMetaData and its sub-types are not defined. It > looks > > > > like > > > > > this > > > > > > spec relies on thrift, but I think that it should be > > > self-contained. > > > > > > - It should be more clear exactly how to construct each GCM or > > CTR > > > > > > encrypted buffer. Is it necessary to specify padding for > > AES-GCM? > > > I > > > > > see > > > > > > from a quick google search that some implementations do, but > > > there’s > > > > > > nothing in this doc. > > > > > > - I don’t think that this explains enough of the intent that > is > > > > behind > > > > > > the specification. For example, “Key metadata is a free-form > > byte > > > > > array > > > > > > that can be used by a reader to retrieve the column encryption > > > key” > > > > > should > > > > > > be more clear about what this byte array actually contains or > > > > > represents. > > > > > > Will it identify a key that can be fetched from a store? Will > it > > > be > > > > a > > > > > > randomly-generated key stored encrypted by another key? > > > > > > - This changes the definition of ColumnChunk’s file_offset > field > > > and > > > > > > the location of ColumnMetaData in some cases. Instead of > > > repurposing > > > > > thrift > > > > > > structures, the spec should introduce new ones, like an > > > > > > EncryptedColumnChunk that preserves the meaning of fields in > > > > > ColumnChunk > > > > > > but separates out ColumnMetaData. > > > > > > - This contains details that aren’t required, like using the > > > > > > “.parquet.encrypted” file extension. > > > > > > - The only time the new magic bytes are mentioned is after the > > > > footer > > > > > > and encryption metadata, but the diagram shows that the first > > > bytes > > > > > in the > > > > > > file are updated as well. This is also only in the encrypted > > > footer > > > > > mode. > > > > > > Should PARE magic bytes be used in plaintext footer mode? > > > > > > > > > > > > Minor note: I would also prefer to vote on GCM, leaving out CTR > for > > > now > > > > > > and adding it once the GCM spec is finished. That way we can > > > > concentrate > > > > > on > > > > > > a single cipher mode instead of thinking about multiple modes at > > > once. > > > > > > > > > > > > On Tue, Oct 16, 2018 at 2:44 AM Anna Szonyi > > > > <[email protected] > > > > > > > > > > > > wrote: > > > > > > > > > > > >> +1 (non-binding) > > > > > >> > > > > > >> On Tue, Oct 16, 2018 at 11:14 AM Nandor Kollar > > > > > >> <[email protected]> > > > > > >> wrote: > > > > > >> > > > > > >> > +1 (non-binding) > > > > > >> > On Tue, Oct 16, 2018 at 10:59 AM 俊杰陈 <[email protected]> > > wrote: > > > > > >> > > > > > > > >> > > +1 (non-binding) > > > > > >> > > > > > > > >> > > > > > > > >> > > Zoltan Ivanfi <[email protected]> 于2018年10月16日周二 > > > 下午4:46写道: > > > > > >> > > > > > > > >> > > > +1 (binding) > > > > > >> > > > > > > > > >> > > > Cheers, > > > > > >> > > > > > > > > >> > > > Zoltan > > > > > >> > > > > > > > > >> > > > On Tue, Oct 16, 2018 at 10:11 AM Gidon Gershinsky < > > > > > [email protected] > > > > > >> > > > > > > >> > > > wrote: > > > > > >> > > > > > > > > >> > > > > Hello Parquet developers, > > > > > >> > > > > > > > > > >> > > > > Per the last sync discussion, it is time to call for a > > vote > > > on > > > > > the > > > > > >> > > > Parquet > > > > > >> > > > > Modular Encryption design sign-off. The design doc can > be > > > > found > > > > > at > > > > > >> > the > > > > > >> > > > > encryption branch of the parquet-format repository, > > > > > >> > > > > > > > > > >> > > > > > > > > https://github.com/apache/parquet-format/blob/encryption/Encryption.md > > > . > > > > > >> > > > > > > > > > >> > > > > The design is stable by now. This work had started 10 > > months > > > > > ago, > > > > > >> has > > > > > >> > > > been > > > > > >> > > > > extensively reviewed - and implemented (in Java, > > partially > > > in > > > > > >> C++), > > > > > >> > by a > > > > > >> > > > > number of folks from different companies. To continue > with > > > the > > > > > >> > > > > implementation pull requests, we need the design to be > > > > formally > > > > > >> > signed > > > > > >> > > > off > > > > > >> > > > > by the community. > > > > > >> > > > > > > > > > >> > > > > Cheers, Gidon > > > > > >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > > > >> > > -- > > > > > >> > > Thanks & Best Regards > > > > > >> > > > > > > >> > > > > > > > > > > > > > > > > > > -- > > > > > > Ryan Blue > > > > > > Software Engineer > > > > > > Netflix > > > > > > > > > > > > > > > > > > > > > -- > > > > > Ryan Blue > > > > > Software Engineer > > > > > Netflix > > > > > > > > > > > > > > > > > > -- > > > Ryan Blue > > > Software Engineer > > > Netflix > > > > > > > > -- > Ryan Blue > Software Engineer > Netflix > -- Xinli Shang
