Runtime: рд╕рд┐рдлрд░ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдирд┐рдореНрди рд╕реНрддрд░ рдЖрджрд┐рдо (рдПрдИрдПрд╕-рдЬреАрд╕реАрдПрдо рдкрд╣рд▓рд╛ рд╣реИ)

рдХреЛ рдирд┐рд░реНрдорд┐рдд 29 рдЕрдЧре░ 2017  ┬╖  143рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: dotnet/runtime

рджрд▓реАрд▓

рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд▓рд┐рдП рдХрдИ рд╕рд┐рдлрд░ рдХреА рд╕рд╛рдорд╛рдиреНрдп рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЖрдЬ рдХрд╛ рдорд┐рд╢реНрд░рдг рдереЛрдбрд╝рд╛ рдЕрд╕рдВрдмрджреНрдз рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдПрдИрдПрдбреА рд╕реНрдЯрд╛рдЗрд▓ рд╕рд┐рдлрд░ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╡рд░реНрддрдорд╛рди рдбрд┐рдЬрд╛рдЗрди рднреА рдЖрд╡рдВрдЯрди рдХреЗ рд▓рд┐рдП рдкреНрд░рд╡рдг рд╣реИрдВ рдФрд░ рд▓реМрдЯрдиреЗ рд╡рд╛рд▓реЗ рд╕рд░рдгреА рдХреЗ рдХрд╛рд░рдг рдЗрдиреНрд╣реЗрдВ рдЯрд╛рд▓рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдПрдкреАрдЖрдИ

рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрджреНрджреЗрд╢реНрдп рд╕рд╛рд░ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдЬрд┐рд╕реЗ рдареЛрд╕ рд╡рд░реНрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рд╡рд┐рд╕реНрддрд╛рд░ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдФрд░ рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╡рд░реНрдЧ рд╣реЛрдиреЗ рд╕реЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдХреЙрд▓ рдХреЗ рдмреАрдЪ рд╕реНрдерд┐рддрд┐ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдПрдкреАрдЖрдИ рдХреЛ рдХрдо рдЖрд╡рдВрдЯрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛ рдХреЗ рдкреБрдирд░реНрдЪрдХреНрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреА рдЪрд╛рд╣рд┐рдП (рд╣рд░ рдмрд╛рд░ рдПрдХ рдирдП рдЙрджрд╛рд╣рд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЕрдкреНрд░рдмрдВрдзрд┐рдд рдХреБрдВрдЬреА рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП)ред рдЯреНрд░реИрдХ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдЕрдХреНрд╕рд░ рдЕрдкреНрд░рдмрдВрдзрд┐рдд рдкреНрд░рдХреГрддрд┐ рдХреЗ рдХрд╛рд░рдг рд╡рд░реНрдЧ рдХреЛ IDisposable рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

public abstract class Cipher : IDisposable
{
    public virtual int TagSize { get; }
    public virtual int IVSize { get; }
    public virtual int BlockSize { get; }
    public virtual bool SupportsAssociatedData { get; }

    public abstract void Init(ReadOnlySpan<byte> key, ReadOnlySpan<byte> iv);
    public abstract void Init(ReadOnlySpan<byte> iv);
    public abstract int Update(ReadOnlySpan<byte> input, Span<byte> output);
    public abstract int Finish(ReadOnlySpan<byte> input, Span<byte> output);
    public abstract void AddAssociatedData(ReadOnlySpan<byte> associatedData);
    public abstract int GetTag(Span<byte> span);
    public abstract void SetTag(ReadOnlySpan<byte> tagSpan);
}

рдЙрджрд╛рд╣рд░рдг рдЙрдкрдпреЛрдЧ

(рдЗрдирдкреБрдЯ/рдЖрдЙрдЯрдкреБрдЯ рд╕реНрд░реЛрдд рдЖрдИрдУ рд╕реНрд░реЛрдд рдХреА рддрд░рд╣ рдПрдХ рдкреМрд░рд╛рдгрд┐рдХ рдЕрд╡рдзрд┐ рдЖрдзрд╛рд░рд┐рдд рд╕реНрдЯреНрд░реАрдо рд╣реИ)

using (var cipher = new AesGcmCipher(bitsize: 256))
{
    cipher.Init(myKey, nonce);
    while (!inputSource.EOF)
    {
        var inputSpan = inputSource.ReadSpan(cipher.BlockSize);
        cipher.Update(inputSpan);
        outputSource.Write(inputSpan);
    }
    cipher.AddAssociatedData(extraInformation);
    cipher.Finish(finalBlockData);
    cipher.GetTag(tagData);
}

рдПрдкреАрдЖрдИ рд╡реНрдпрд╡рд╣рд╛рд░

  1. рдпрджрд┐ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЯреИрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ [рдЕрдкрд╡рд╛рдж рдкреНрд░рдХрд╛рд░?] рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдорд╛рдиреНрдп рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
  2. рдпрджрд┐ рдЯреИрдЧ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдЕрдорд╛рдиреНрдп рд╣реИ рддреЛ рдЗрд╕реЗ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
  3. рдПрдХ рдмрд╛рд░ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрдирд┐рдЯ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдлреЗрдВрдХ рджреЗрдЧрд╛
  4. рдПрдХ рдмрд╛рд░ рдЗрдирд┐рдЯ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, "рдлрд┐рдирд┐рд╢рд┐рдВрдЧ" рдХреЗ рдмрд┐рдирд╛ рджреВрд╕рд░реА рдХреЙрд▓ рдлреЗрдВрдХ рджреА рдЬрд╛рдПрдЧреА
  5. рдпрджрд┐ рдкреНрд░рдХрд╛рд░ рдПрдХ рдХреБрдВрдЬреА рдХреА рдЖрдкреВрд░реНрддрд┐ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ (рдПрдХ рд╕реАрдзрд╛ "рдирдпрд╛" рдЙрджрд╛рд╣рд░рдг) рдпрджрд┐ рдкреНрд░рд╛рд░рдВрднрд┐рдХ "рдЗрдирд┐рдЯ" рдХреЙрд▓ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ IV рд╣реИ рддреЛ рдпрд╣ рдлреЗрдВрдХ рджреЗрдЧрд╛
  6. рдпрджрд┐ рдкреНрд░рдХрд╛рд░ рдПрдХ рд╕реНрдЯреЛрд░ рдЖрдзрд╛рд░рд┐рдд рдХреБрдВрдЬреА рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реБрдЖ рдерд╛ рдФрд░ рдЖрдк рдХреБрдВрдЬреА рдХреЛ Init рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рди рдХрд┐ рдХреЗрд╡рд▓ IV рдХреЛ рдпрд╣ рдлреЗрдВрдХ рджреЗрдЧрд╛
  7. рдпрджрд┐ рдирд┐рдкрдЯрд╛рди рд╕реЗ рдкрд╣рд▓реЗ рдЯреИрдЧ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдЗрдирд┐рдЯ рдХреЛ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЧрд▓рддреА рд╕реЗ рдЯреИрдЧ рдПрдХрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП?

рд╕рдВрджрд░реНрдн рдбреЙрдЯрдиреЗрдЯ/рдХреЛрд░рдПрдлрдПрдХреНрд╕#7023

рдЕрдкрдбреЗрдЯ

  1. рдЧреИрд░ рдХреЛ IV рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ред
  2. рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдиреБрднрд╛рдЧ
  3. рд╕рд┐рдВрдЧрд▓ рдЗрдирдкреБрдЯ/рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдкреИрди рдХреЗрд╕ рдХреЛ рдлрд┐рдирд┐рд╢ рдФрд░ рдЕрдкрдбреЗрдЯ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛, рд╡реЗ рд╕рд┐рд░реНрдл рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдердб рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ
  4. @bartonjs . рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдП рдЧрдП рдХрдИ рд╕реНрдкреИрди рдХреЛ рд░реАрдбреЛрдирд▓реАрд╕реНрдкреИрди рдореЗрдВ рдмрджрд▓рд╛ рдЧрдпрд╛
  5. рд╣рдЯрд╛рдП рдЧрдП рд░реАрд╕реЗрдЯ, IV рдХреЗ рд╕рд╛рде Init рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
api-suggestion area-System.Security

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@bartonjs рдЖрдк рд╕рдЪрдореБрдЪ рд╕рднреА рддрдХрдиреАрдХреА рдФрд░ рддрд╛рд░реНрдХрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдгреЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдХрдордЬреЛрд░ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рд░реВрдк рдореЗрдВ рдЧреЛ рдФрд░ libsodium рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рддрд╛рд░реАрдЦреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

рдирд╣реАрдВ, рдореИрдВ рдкреЗрд╢реЗрд╡рд░ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд░реЛрдВ рдХреА рд╕рд▓рд╛рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЕрд╕рд╛рдзрд╛рд░рдг рд░реВрдк рд╕реЗ рдЦрддрд░рдирд╛рдХ рд╣реИ рдФрд░ рд╣рдореЗрдВ AEAD рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред рдлрд┐рд░ рдореИрдВ рд╕реАрдПрдирдЬреА рдЯреАрдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ "рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдЗрд╕реЗ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд▓рдЧрднрдЧ рдХреЛрдИ рднреА рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ" (рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЯреЗрд▓реАрдореЗрдЯреНрд░реА рдмрдирд╛рдо рдХреНрд╖реЗрддреНрд░рд░рдХреНрд╖рдг рд╕рд╣рд╛рдпрддрд╛ рдЕрдиреБрд░реЛрдзреЛрдВ рд╕реЗ рдХрд┐рддрдирд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реИ)ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рдПрдХ-рд╢реЙрдЯ рдорд╛рд░реНрдЧ рдкрд░ рдЪрд▓реЗ рдЧрдП рд╣реИрдВ рдмрд╕ рдирд┐рд░реНрдгрдп рдХреЛ _reinforces_ рдХрд░рддреЗ рд╣реИрдВред

рдЧрд┐рдЯрд╣рдм рдкрд░ рдЕрдм рддрдХ рдкреНрд░рджрд░реНрд╢рд┐рдд рдорд╛рдВрдЧ рдЕрдкрд░реНрдпрд╛рдкреНрдд рдХреНрдпреЛрдВ рд╣реИ?

рдХреБрдЫ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЦрдВрдбрд┐рдд рдмрдлрд╝рд░реНрд╕ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡рддрдГ ReadOnlySequence рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдЧрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЙрд▓рд░ рдХреЛ рдбреЗрдЯрд╛ рдкреБрди: рд╕рдВрдпреЛрдЬрди рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдПрдкреАрдЖрдИ рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдкрд░рд┐рджреГрд╢реНрдп рд╣реИред

рдмрдбрд╝реА рдлрд╛рдЗрд▓реЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрдбрд╝реА рдлрд╛рдЗрд▓реЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЬреАрд╕реАрдПрдо рдХрд╛ рдХрдЯрдСрдл рд╕рд┐рд░реНрдл 64GB рд╣реИ, рдЬреЛ рдХрд┐ "рдЗрддрдирд╛ рдмрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИ" (рдареАрдХ рд╣реИ, рдпрд╣ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ "рд╡рд╛рд╣, рдпрд╣ рдмрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИ" рдпрд╣ рд╣реБрдЖ рдХрд░рддрд╛ рдерд╛)ред рдореЗрдореЛрд░реА-рдореИрдк рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЗрдВ 2GB RAM рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рд╕реНрдкреИрди (2^31-1 рддрдХ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВрдЧреАред рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЕрдзрд┐рдХрддрдо рд╕реЗ рдХреБрдЫ рдмрд┐рдЯреНрд╕ рдХрд╛ рдореБрдВрдбрди рдХрд░ рджрд┐рдпрд╛ рд╣реИ... рдЬреЛ рд╢рд╛рдпрдж рд╕рдордп рдХреЗ рд╕рд╛рде рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдИрдПрдбреА рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреИрд░-рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рд╕реЗ рд╕рдбрд╝рдХ рдХреЗ рдиреАрдЪреЗ рдРрд╕реЗ рд╕рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рд╣реИ рдирд╛?

рдореИрдВ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдЖрд╢реНрд╡рд╕реНрдд рд╣реВрдВ рдХрд┐ @GrabYourPitchforks рд╕рд╣реА рдерд╛ (https://github.com/dotnet/corefx/issues/23629#issuecomment-334638891) рдХрд┐ рд╢рд╛рдпрдж рдПрдХ рд╕рдордЭрджрд╛рд░ рдПрдХреАрдХреГрдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд╣реАрдВ рд╣реИред GCM _requiring_ a nonce/IV рдФрд░ SIV _forbidding_ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ AEAD рдореЛрдб/рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ... AEAD рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рдПрдмреНрд╕рдЯреНрд░реИрдХреНрдЯ рдЕрд╡реЗ" рдзрд╛рд░рдгрд╛ рдирд╣реАрдВ рд╣реИред SIV рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ "рдЯреИрдЧ" рдХрд╣рд╛рдБ рдЬрд╛рддрд╛ рд╣реИред рдЬреАрд╕реАрдПрдо/рд╕реАрд╕реАрдПрдо рдирд╣реАрдВред SIV рдЯреИрдЧ-рдкреНрд░рдердо рд╣реИ, рдХрд▓реНрдкрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ред

SIV рддрдм рддрдХ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдЬрдм рддрдХ рдХрд┐ рдЙрд╕рдХреЗ рдкрд╛рд╕ рд╕рд╛рд░рд╛ рдбреЗрдЯрд╛ рди рд╣реЛред рддреЛ рдЗрд╕рдХрд╛ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ рддреЛ рдлреЗрдВрдХрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ (рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕реЗ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ) рдпрд╛ рдмрдлрд░ (рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдПрди ^ 2 рдСрдкрд░реЗрд╢рди рд╕рдордп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред рд▓рдВрдмрд╛рдИ рдЬреНрдЮрд╛рдд рд╣реЛрдиреЗ рддрдХ CCM рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛; рд▓реЗрдХрд┐рди рд╕реАрдПрдирдЬреА рд▓рдВрдмрд╛рдИ рдореЗрдВ рдкреВрд░реНрд╡-рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрдХреЗрдд рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рд╣реА рдирд╛рд╡ рдореЗрдВ рд╣реИред

рд╣рдореЗрдВ рдПрдХ рдирдпрд╛ рдШрдЯрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд╣рд╛рдБ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рд╣реА рдЪреАрдЬрд╝ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЧрд▓рдд рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛред рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдПрдХ рд╕реНрдЯреНрд░реАрдо рдХреНрд▓рд╛рд╕ (рдХреНрд░рд┐рдкреНрдЯреЛрд╕реНрдЯреНрд░реАрдо рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдЖрдкрдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡) рдХреЛ рддрд╛рд░-рддрд╛рд░ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдФрд░ рдЖрдХрд░реНрд╖рдХ рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЯреИрдЧ рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рдмрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдИ рдХреЗ рд▓рд╛рдн рдХреЛ рд▓рдЧрднрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрддрд╛ рд╣реИред . ( IGcmDecryptor => CryptoStream => StreamReader => XmlReader => "рд░реБрдХреЛ, рдпрд╣ рдХрд╛рдиреВрдиреА XML рдирд╣реАрдВ рд╣реИ..." => рдЕрдиреБрдХреВрд▓реА рд╕рд┐рдлрд░рдЯреЗрдХреНрд╕реНрдЯ рдСрд░реИрдХрд▓) .

рдпрд╣ рдмрд┐рдВрджреБ рдкрд░ рд╣реЛ рд░рд╣рд╛ рд╣реИ ... рдЧреНрд░рд╛рд╣рдХ рдХреА рдорд╛рдВрдЧред

рдЬреИрд╕рд╛ рдХрд┐, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЬреАрд╡рди рдореЗрдВ рдХрдИ рдмрд╛рд░ рд╕реБрдирд╛ рд╣реИ: рдореБрдЭреЗ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдЖрдк рд╣рдорд╛рд░реЗ рдорди рдореЗрдВ рдЧреНрд░рд╛рд╣рдХ рдирд╣реАрдВ рд╣реИрдВред рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдБ рдХрд┐ рд╢рд╛рдпрдж рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ GCM рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред рдЖрдк рдЯреИрдЧ рд╕рддреНрдпрд╛рдкрди рдХреЗ рдмрд╛рдж рддрдХ рдХреЗрд╡рд▓ рдПрдХ рдЕрд╕реНрдерд┐рд░ рдлрд╝рд╛рдЗрд▓/рдмрдлрд░/рдЖрджрд┐ рдХреЛ рд╕реНрдЯреНрд░реАрдо рдХрд░рдирд╛ рдЬрд╛рдирддреЗ рд╣реИрдВред рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЧреИрд░ рдкреНрд░рдмрдВрдзрди рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ, рдФрд░ рдЖрдк рдЗрд╕реЗ рдЧрд▓рдд рд╣реЛрдиреЗ рдХреЗ рдЬреЛрдЦрд┐рдореЛрдВ рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВред рдЖрдк рд╕реНрдЯреНрд░реАрдо рдХреЗ рдЖрдХрд╛рд░ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдФрд░ 2^36-64 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдмрд╛рдж рдПрдХ рдирдП GCM рд╕реЗрдЧрдореЗрдВрдЯ рдореЗрдВ рдХрдЯреМрддреА рдХрд░рдирд╛ рдЬрд╛рдирддреЗ рд╣реИрдВред рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕рдм рдХрд╣рд╛ рдФрд░ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдпрджрд┐ рдЖрдк рдЙрди рдЪреАрдЬреЛрдВ рдХреЛ рдЧрд▓рдд рдкрд╛рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЖрдкрдХреА рдмрдЧ рд╣реИред

рджреВрд╕рд░реА рдУрд░, рдореЗрд░реЗ рдорди рдореЗрдВ рдЬреЛ рдЧреНрд░рд╛рд╣рдХ рд╣реИ, рд╡рд╣ рд╡рд╣ рд╣реИ рдЬреЛ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ "рдореБрдЭреЗ рдЗрд╕реЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдирд╛ рд╣реИ" рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдмреЙрд╕ рдиреЗ рдЙрдиреНрд╣реЗрдВ рдмрддрд╛рдпрд╛ рдерд╛ред рдФрд░ рд╡реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреИрд╕реЗ рдХрд░реЗрдВ рдХреА рдЦреЛрдЬ рдХрд░рддреЗ рд╕рдордп рдХреБрдЫ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдиреЗ рдХрд╣рд╛ "рд╣рдореЗрд╢рд╛ AE рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ" рдФрд░ GCM рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ ".NET рдореЗрдВ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди" рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рдХреНрд░рд┐рдкреНрдЯреЛрд╕реНрдЯреНрд░реАрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рд╡реЗ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЗрд╕ рдмрд╛рдд рдХрд╛ рдХреЛрдИ рдЕрдВрджрд╛рдЬрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ SSLv2 рдЪреБрдирдиреЗ рдЬреИрд╕рд╛ рд╣реА рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ ... рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдПрдХ рдмреЙрдХреНрд╕ рдХреА рдЬрд╛рдБрдЪ рдХреА, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдирд╣реАрдВред рдФрд░ рдЬрдм рд╡реЗ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рддреЛ _рд╡рд╣_рдмрдЧ рдЙрди рд╕рднреА рдХрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдмреЗрд╣рддрд░ рдЬрд╛рдирддреЗ рдереЗ, рд▓реЗрдХрд┐рди рдЧрд▓рдд рдХрд╛рдо рдХреЛ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рднреА 143 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдПрдкреАрдЖрдИ рдкрд░ рддреНрд╡рд░рд┐рдд-рд╕реЗ-рдиреНрдпрд╛рдпрд╛рдзреАрд╢ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ (рд╕рд╣рд╛рдпрдХ рд╣реЛрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢):

  • Span<T> NetStandard2 рдореЗрдВ рдирд╣реАрдВ рд╣реИред
  • "рдиреЙрди" рдмрд╣реБрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ - рдпрд╛рдиреАред рдЬреАрд╕реАрдПрдо рдХреА рдЧрдВрдзред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ GCM рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ (рдЙрджрд╛. NIST SP800-38D) рднреА рдЗрд╕реЗ "IV" рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ - GCM рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ - рдПрдХ рдЧреИрд░ рд╣реЛрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдиреНрдп рдПрдИрдПрдбреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ IV рдХреЛ рдЧреИрд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЙрджрд╛ред CBC+HMAC рдХреЗ рддрд╣рдд IV рдХреЛ рджреЛрд╣рд░рд╛рдирд╛ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ)ред
  • рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдПрдИрдПрдбреА рдХреЛ рдпрд╛ рддреЛ рдХреНрд░рд┐рдкреНрдЯреЛрд╕реНрдЯреНрд░реАрдо рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдмрд╛рдз рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ "рдПрдИрдПрдбреАрдХреНрд░рд┐рдкреНрдЯреЛрд╕реНрдЯреНрд░реАрдо" рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдХреНрд░рд┐рдкреНрдЯреЛрд╕реНрдЯреНрд░реАрдо рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдЯреНрд░реАрдо рдХрд░рдирд╛ / рдмрд╛рд╣рд░ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред
  • рдПрдИрдПрдбреА рдПрдкреАрдЖрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдПрдПрдбреА (рдПрд╕реЛрд╕рд┐рдПрдЯреЗрдб рдбреЗрдЯрд╛) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдВрддрд░рд┐рдХ рдХреБрдВрдЬреА рд╡реНрдпреБрддреНрдкрддреНрддрд┐ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рдЯреИрдЧ рдЧрдгрдирд╛/рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ AAD рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдкреНрд░рддрд┐рдмрдВрдзрд╛рддреНрдордХ рд╣реИ рдФрд░ рдПрдХ рдордЬрдмреВрдд AEAD рдореЙрдбрд▓ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред
  • "рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ *" рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреБрдЫ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЧреЗрдЯрдЯреИрдЧ)ред рдпрджрд┐ рд╡реЗ рд╢реВрдиреНрдп рд╣реИрдВ, рддреЛ рд╡реЗ рдЕрд╡рд╢реНрдп рд╣реА рдХреБрдЫ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реЛрдВрдЧреЗ/рд╕реНрдерд┐рддрд┐ рдмрджрд▓ рд░рд╣реЗ рд╣реЛрдВрдЧреЗред
  • "рдлрд┐рдирд┐рд╢рд┐рдВрдЧ" рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдЯреИрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рд╢рд╛рдпрдж рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП "IsFinished" рдорджрджрдЧрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
  • рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдиреЗ ICryptoTransform рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рд╣реИ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдкреБрди: рдЙрдкрдпреЛрдЧ, рдмрд╣реБ-рдмреНрд▓реЙрдХ рд╕рдорд░реНрдерди рдФрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрдХрд╛рд░ рдХреЗ рдЗрдирдкреБрдЯ/рдЖрдЙрдЯрдкреБрдЯ рдмреНрд▓реЙрдХ рдЖрдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ред рдЗрди рдЪрд┐рдВрддрд╛рдУрдВ рдкрд░ рдХрдмреНрдЬрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдПрдИрдПрдбреА рдПрдкреАрдЖрдИ рд╡рд┐рд╡реЗрдХ рдХреЗ рдкреНрд░рдорд╛рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдПрдкреАрдЖрдИ рдХрд╛ рдкрд╣рд▓рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдИрдПрд╕-рдЬреАрд╕реАрдПрдо рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдмрд▓реНрдХрд┐ рдПрдЪрдПрдордПрд╕реА рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдХреНрд▓рд╛рд╕рд┐рдХ/рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдПрдИрдПрд╕-рд╕реАрдмреАрд╕реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХрд╛ рд╕рд░рд▓ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рд╡реНрдпрдХреНрддрд┐ рдЖрдЬ рд╕рд░рд▓, рдореМрдЬреВрджрд╛, рдкреНрд░рд╕рд┐рджреНрдз .NET рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде AES-CBC+HMAC AEAD рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЖрдЗрдП рдкрд╣рд▓реЗ рдПрдХ рдЙрдмрд╛рдК рдкреБрд░рд╛рдиреЗ [AES-CBC+HMAC] рдХреЛ рдирдП AEAD API рдкрд░ рдХрд╛рдо рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рднреА рдХреЗ рд▓рд┐рдП MVP рдФрд░ рдЯреЗрд╕реНрдЯ-рдбреНрд░рд╛рдЗрд╡ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рд╣реИред

рдЧреИрд░/рдЪрддреБрд░реНрде рдирд╛рдордХрд░рдг рдореБрджреНрджрд╛ рдХреБрдЫ рдРрд╕рд╛ рдерд╛ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдЕрдирд┐рд╢реНрдЪрд┐рдд рдерд╛, IV рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╕реЗ рдЦреБрд╢ рд╣реВрдВ рдЗрд╕рд▓рд┐рдП рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред

рдХреБрдЫ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХрд┐рд╕реА рднреА рдЖрд╡рдВрдЯрди рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИред рдПрдХ рдЕрдзрд┐рднрд╛рд░ Get() рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рджреЗрддрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдирд╛рдордХрд░рдг рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдХрд╛рдлреА рд╡рд┐рд╡рд╛рд╣рд┐рдд рд╣реВрдВ рдХрд┐ рдкреВрд░реЗ рдПрдкреАрдЖрдИ рдХреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдЖрд╡рдВрдЯрди рдореБрдХреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдзрд╛рд░рд╛рдУрдВ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдЗрд╕рд╕реЗ рдЕрддреНрдпрдзрд┐рдХ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рдПрдкреАрдЖрдИ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдирд┐рдЪрд▓реЗ рд╕реНрддрд░ рдХреЗ рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЖрдкрдХреЗ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдЯреИрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдкрдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЖрдкрдиреЗ рдХрдм рдлрд┐рдирд┐рд╢ рдХрд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдкреАрдЖрдИ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдкреАрдЖрдИ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИ рдПрдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдЦрдВрдб рддрд╛рдХрд┐ рд╣рдо рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдХреЛ рдкрдХрдбрд╝ рд╕рдХреЗрдВ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХрд┐рд╕ рд╕рд┐рдлрд░ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдХреЛрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд┐рдлрд░ рдПрдХрдорд╛рддреНрд░ рд▓рдХреНрд╖реНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдПрдХ рдирдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдпреЛрдЬрди рдПрдкреАрдЖрдИ рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдлрд┐рдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдИрдПрд╕ рдЬреАрд╕реАрдПрдо рдФрд░ рд╕реАрдмреАрд╕реА рджреЛрдиреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

(рд╕рднреА рд╡рд┐рд╖рдп рдкрд░ рдлреАрдбрдмреИрдХ рдЕрдЪреНрдЫрд╛ рдпрд╛ рдмреБрд░рд╛ рд╣рдореЗрд╢рд╛ рдорджрджрдЧрд╛рд░ рд╣реЛрддрд╛ рд╣реИ!)

  • рдХрдХреНрд╖рд╛, рдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕?
  • рдХреИрд╕реЗ, рдпрджрд┐ рдмрд┐рд▓реНрдХреБрд▓ рднреА, рд╡рд░реНрддрдорд╛рди рд╕рдордорд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рдердо рд╡рд░реНрдЧ рдЗрд╕рдХреЗ рд╕рд╛рде рдкрд░рд╕реНрдкрд░ рдХреНрд░рд┐рдпрд╛ рдХрд░рддреЗ рд╣реИрдВ?
  • рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓рдЧрд╛рддрд╛рд░ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреИрд╕реЗ рдЯреНрд░рд┐рдкрд▓рдбреАрдИрдПрд╕рд╕реАрдПрдирдЬреА рдФрд░ рдПрдИрдПрд╕рд╕реАрдПрдирдЬреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
  • рдЗрдирдореЗрдВ рд╕реЗ рдХрдИ рд╕реНрдкреИрди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рд░реАрдбрдСрдирд▓реАрд╕реНрдкреИрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

@Drawaes рдЗрд╕ рдПрдкреАрдЖрдИ рдкрд░ рдЧреЗрдВрдж рдХреЛ рдШреБрдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдХреБрдЫ рд╡рд┐рдЪрд╛рд░:

  1. рдЯреИрдЧ рдирд┐рд░реНрдорд╛рдг рдФрд░ рд╕рддреНрдпрд╛рдкрди рдЗрд╕ рдПрдкреАрдЖрдИ рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЯреИрдЧ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдкреВрд░реЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рд╡рд┐рдлрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ, рддреЛ рдореИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдФрд░ рдлрд┐рдирд┐рд╢ рдСрдкрд░реЗрд╢рдВрд╕ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдЯреИрдЧ рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЧрд▓рддреА рд╕реЗ рдЕрдирджреЗрдЦрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рдпрд╣ рд╣реИ рдХрд┐ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдорд╛рди рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдФрд░ рдЕрдВрддрд┐рдо рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
  2. рдЕрдВрдд рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рджреМрд░рд╛рди рдЖрдЙрдЯрдкреБрдЯ рдмреНрд▓реЙрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реА рдорд┐рд╢реНрд░рд┐рдд рднрд╛рд╡рдирд╛рдПрдВ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЯреИрдЧ рдХреА рдЬрд╛рдВрдЪ рд╣реЛрдиреЗ рддрдХ рдбреЗрдЯрд╛ рднрд░реЛрд╕реЗрдордВрдж рдирд╣реАрдВ рд╣реИ (рдЬреЛ рддрдм рддрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдЬрдм рддрдХ рдХрд┐ рд╕рднреА рдбреЗрдЯрд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреЗ)ред рд╣рдореЗрдВ рдЙрд╕ рдЯреНрд░реЗрдбрдСрдлрд╝ рдХрд╛ рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
  3. рдХреНрдпрд╛ рд░реАрд╕реЗрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ? рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдмрд╕ рд░реАрд╕реЗрдЯ? рд╣рдо рд╡реГрджреНрдзрд┐рд╢реАрд▓ рд╣реИрд╢ рдкрд░ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ (рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдирдП IVs рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ)

@bartonjs

  1. рдХреНрд▓рд╛рд╕, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдХреНрд╕рд░ рдмреАрд╕реАрдПрд▓ рдореЗрдВ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдк рдмрд╛рдж рдореЗрдВ рд╕рдм рдХреБрдЫ рддреЛрдбрд╝реЗ рдмрд┐рдирд╛ рдЗрд╕рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреАрд╡рди рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд┐рд▓реНрд▓рд╛ рдХреА рддрд░рд╣ рд╣реИ ... рдЬрдм рддрдХ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
    рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдПрдХ рдЕрдореВрд░реНрдд рдкреНрд░рдХрд╛рд░ рд╕реЗ рдПрдХ рд╕реАрд▓рдмрдВрдж рд╡рд░реНрдЧ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреЗрдЬрд╝ рд╣реИ (рдЕрднреА рддрдХ) рдХреНрдпреЛрдВрдХрд┐ рдЬрд┐рдЯ рдЕрдм рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╡рд┐рдЪрд▓рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ ... рддреЛ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдореБрдлрд╝реНрдд рд╣реИред рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░реЗрд╖рдг рдЙрддрдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ (рдЕрднреА рднреА рдЕрдЪреНрдЫрд╛ рд╣реИ рдЙрддрдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ)
  2. рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ? рдореБрдЭреЗ рд╡рд░реНрддрдорд╛рди рд╕рд╛рдорд╛рди рдореЗрдВ рдмрд╣реБрдд рдХрдо рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрддрдирд╛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╕рднреА рдЙрдЪрд┐рдд рдЖрдзреБрдирд┐рдХ рдПрд▓реНрдЧреЛ рдХреЛ рд╕реАрдзреЗ рдкреИрдЪ рдХрд░ рджреВрдВрдЧрд╛ (рдЕрдиреНрдп рд╡рд░реНрдЧреЛрдВ рдореЗрдВ 3DES рдЫреЛрдбрд╝ рджреЗрдВ :) рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рд╕рднреА рдЙрддреНрддрд░ рдирд╣реАрдВ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕ рдкрд░ рдХреЛрдИ рдФрд░ рд╡рд┐рдЪрд╛рд░ рд╣реИ?
  3. рд╕реНрдерд╛рдпреА рдХреБрдВрдЬреА рдЖрд╕рд╛рди рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдХреБрдВрдЬреА рд╡рд┐рдзрд┐ рдпрд╛ рджреГрдврд╝рддрд╛ рд╕реНрдЯреЛрд░ рдкрд░ рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐ рдмрдирд╛рдПрдВред
MyKeyStore.GetCipher();

рдЗрд╕реЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдбрд┐рд╕реНрдкреЛрдЬреЗрдмрд▓ рд╣реИ рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рднреА рд░реЗрдлрд░реА рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдбрд┐рд╕реНрдкреЛрдЬреЗрдмрд▓ рдкреИрдЯрд░реНрди рджреНрд╡рд╛рд░рд╛ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рд╡реЗ рдХреБрдВрдЬреА рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдПрдХ рдЕрдорд╛рдиреНрдп рдСрдкрд░реЗрд╢рди рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрдВред

рд╣рд╛рдБ рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдм рдореИрдВ рдЕрдкрдиреЗ рдлреЛрди рдкрд░ рдЯреНрдпреВрдм рдкрд░ рдирд╣реАрдВ рд╣реВрдВ рддреЛ рдореИрдВ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░реВрдВрдЧрд╛ред

@morganbr рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ ... рдореИрдВ рдмрд╕ рдпрд╣ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ;)

  1. рдХреНрдпрд╛ рдЖрдк рдПрдХ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП рджреЗрдЦрддреЗ рд╣реИрдВ? рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХреЛрдб рд╣рдореЗрд╢рд╛ рд╕реНрдкрд╖реНрдЯрддрд╛ рд▓рд╛рддрд╛ рд╣реИ
  2. рдпрд╣ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реИ рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛ред рдПрдЪрдПрдордПрд╕реА рдФрд░ рд╣реИрд╢рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЖрдк рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рд░рд╛рдЬреНрдп рдХрд╛ рдЕрдВрддрд░рд┐рдо рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИред рддреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХреЛ рдЕрдЬреНрдЮрд╛рдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдмрдлрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдЗрдП рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЙрджрд╛рд╣рд░рдг рдФрд░ рдЯреАрдПрд▓рдПрд╕ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рд╣рдо 16k рдкреНрд▓реЗрдирдЯреЗрдХреНрд╕реНрдЯ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдмрдлрд╝рд░реНрд╕ рдЖрдЬ 4k рдкреЗрдЬ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ 4*4k рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ/рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рдЖрдк рдореЗрдВ рд╕реЗ рдЕрдВрдд рддрдХ рдореБрдЭреЗ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ рдЙрди рд╕рднреА рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдлрд┐рд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдореБрдЭреЗ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ рддреЛ рдореИрдВ рдЗрд╕реЗ рдлреЗрдВрдХ рджреЗрддрд╛ рд╣реВрдВ? рдпрд╛ рдорд┐рдЯрд╛ рджреЛрдЧреЗред рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдореИрдВ 10mb рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЖрдк рдЙрд╕ рдореЗрдореЛрд░реА рдХреЛ рдкрдХрдбрд╝рддреЗ рд╣реИрдВ, рдЬрдм рдореБрдЭреЗ рдЕрдм рдЧреБрдкреНрдд рдореЗрдореЛрд░реА рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
  3. рдЗрдирд┐рдЯ/рд░реАрд╕реЗрдЯ рдЪреАрдЬрд╝ рдкрд░ 100% рдирд╣реАрдВ (рдЖрдкрдХреЗ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ, рдореЗрд░рд╛ рд╡рд░реНрддрдорд╛рди рдПрдкреАрдЖрдИ рдЖрдХрд╛рд░) рдпрд╣ рдореЗрд░реЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдмреИрдарддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдПрдХ рдирдП рд╕реБрдЭрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рд╣реВрдВ!

рдореБрдЭреЗ рд╡рд░реНрддрдорд╛рди рд╕рд╛рдорд╛рди рдореЗрдВ рдмрд╣реБрдд рдХрдо рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрддрдирд╛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╕реАрдзреЗ рд╕рднреА рдЙрдЪрд┐рдд рдЖрдзреБрдирд┐рдХ рдПрд▓реНрдЧреЛ рдХреЛ рдкреИрдЪ рдХрд░ рджреВрдВрдЧрд╛ (рдЕрдиреНрдп рд╡рд░реНрдЧреЛрдВ рдореЗрдВ 3 рдбреАрдИрдПрд╕ рдЫреЛрдбрд╝ рджреЗрдВ :)

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реЛрдЧреА рдХрд┐ рдХрдВрдЯреЗрдирд░ рдкреНрд░рд╛рд░реВрдк рдЬреИрд╕реЗ рд▓рд┐рдлрд╛рдлрд╛ (рдпрд╛ EncryptedXml) рдХреЛ 3DES-CBC, AES-CBC, рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ ECIES/AES-256-CBC-PKCS7/HMAC-SHA-2 рдХреЗ рд╕рд╛рде рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдХреБрдЫ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред -256 рдХреЛ рд╢рд╛рдпрдж рдпрд╣ рдирд╣реАрдВ рд▓рдЧреЗрдЧрд╛ рдХрд┐ рд╡реЗ рдкреБрд░рд╛рдиреА рдФрд░ рдЯреЗрдврд╝реА-рдореЗрдврд╝реА рдмрд╛рддреЗрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдЕрдЧрд░ рдпрд╣ рдХреЗрд╡рд▓ AE рдХреЗ рд▓рд┐рдП рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рд╡рд╣ рдирд╛рдо рдореЗрдВ рдХрд╣реАрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрднреА рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп "рд╕рд┐рдлрд░" рд╣реИ (рдЬреЛ рдореИрдВ рдерд╛/рд╣реИ, рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░, рдПрдХ рд╢рдмреНрджрдХреЛрд╢/рд╢рдмреНрджрд╛рд╡рд▓реА рдХреЗ рд╕рд╛рде рдмреИрдардиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ "рдСрдкрд░реЗрд╢рди рдХреЗ рдПрдХ рдореЛрдб рдореЗрдВ рдПрдХ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рджрдо" рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╢рдмреНрдж рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рд╕рд┐рдлрд░" == "рдПрд▓реНрдЧреЛрд░рд┐рджрдо", рдЗрд╕рд▓рд┐рдП "рдПрдИрдПрд╕")ред

:) рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдпрд╣ рдореЗрд░рд╛ рд╡рд┐рд╖рдп рдХреНрд╖реЗрддреНрд░ рдирд╣реАрдВ рд╣реИ рдпрд╛ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рд░реБрдЪрд┐ рдирд╣реАрдВ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЖрдкрдХреЗ рдФрд░ рд╕рдореБрджрд╛рдп рдХреЛ рд╕реНрдердЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВ, рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рд╣реИред


рдЗрдирдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддреНрд╡рд░рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдХреИрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдПрдХ рд╡рд┐рдХрд▓реНрдк рдЙрдиреНрд╣реЗрдВ "рд╕рд┐рдлрд░" рдпрд╛ рдЬреЛ рдХреБрдЫ рднреА рдЗрд╕реЗ рдХрдХреНрд╖рд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЙрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓реЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдкрд╣рд▓реА рд▓рд╣рд░ рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд▓реНрджреА рд╕реЗ рдЗрд╕рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдПрдкреАрдЖрдИ рд╕реБрдкрд░ рдХреБрд╢рд▓ рд╣реИ рддреЛ рдореБрдЭреЗ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкрдирд╛ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИред

рдирд╛рдордХрд░рдг рдкрд░ рдПрдХ рд╕рд╛рдЗрдб рдмрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ ... рдореБрдЭреЗ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдХрдард┐рди рд╣реИ
Openssl = рд╕рд┐рдлрд░
рд░реВрдмреА = рд╕рд┐рдлрд░
рдЧреЛ = AEAD рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдбрдХрдЯрд╛рдЗрдкреНрдб рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рд╕рд┐рдлрд░ рдкреИрдХреЗрдЬ
рдЬрд╛рд╡рд╛ = рд╕рд┐рдлрд░

рдЕрдм рдореИрдВ рдЕрд▓рдЧ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реВрдВ рд▓реЗрдХрд┐рди... рдПрдХ рдЪрд▓рди рд╣реИред рдЕрдЧрд░ рдХреБрдЫ рдмреЗрд╣рддрд░ рд╕рдВрднрд╡ рд╣реИ рддреЛ рдЕрдЪреНрдЫрд╛ рд╣реИред

рд╢рд╛рдпрдж "рдмреНрд▓реЙрдХрдореЛрдб рд╕рд┐рдлрд░" ...?

рдореИрдВрдиреЗ рдХреБрдЫ рдмрджрд▓рд╛рд╡ рдХрд┐рдП рд╣реИрдВ, рдЕрдЧрд░ рдХреЛрдИ рдмреЗрд╣рддрд░ рдирд╛рдо рддрдп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдореИрдВ рдирд╛рдордХрд░рдг рдмрджрд▓ рджреВрдВрдЧрд╛ред

рдЬрдм рдореИрдВрдиреЗ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рддреЛ рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдПрдкреАрдЖрдИ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди/рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рднреЗрджрднрд╛рд╡ рдЧрд╛рдпрдм рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдбреЗрдЯрд╛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЙрд╕ рдкреБрдЯ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╕реЗ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯрддрд╛ рдЬреБрдбрд╝ рд╕рдХрддреА рд╣реИред

рдореИрдВ рдХреБрдЫ рддрд░реАрдХреЛрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдПрдкреАрдЖрдИ рдЙрдЪрд┐рдд рдЯреИрдЧ рдЙрдкрдпреЛрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐ рдпрд╣ рдПрдХ рдПрдИрдПрдбреА рдПрдкреАрдЖрдИ рд╣реИ, рди рдХреЗрд╡рд▓ рд╕рдордорд┐рдд рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдордорд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо/рдЖрдИрд╕реАрдХреНрд░рд┐рдкреНрдЯреЛрдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо/рдХреНрд░рд┐рдкреНрдЯреЛрд╕реНрдЯреНрд░реАрдо рд╣реИ)ред рдЯреИрдЧрд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдЗрдиреНрд╣реЗрдВ рдирд┐рд░реНрджреЗрд╢рд╛рддреНрдордХ рдХреЗ рд░реВрдк рдореЗрдВ рди рд▓реЗрдВред
рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛:

class Cipher
{
   void InitializeEncryption(ReadOnlySpan<byte> key, ReadOnlySpan<byte> iv);
   // Ensures decryptors get a tag
   void InitializeDecryption(ReadOnlySpan<byte> key, ReadOnlySpan<byte> iv, ReadOnlySpan<byte> tag);
   // Ensure encryptors produce a tag
    void FinishEncryption(ReadOnlySpan<byte> input, Span<byte> output, Span<byte> tag);
   // Throws if tag didn't verify
   void FinishDecryption(ReadOnlySpan<byte> input, Span<byte> output);
   // Update and properties are unchanged, but GetTag and SetTag are gone
}

рдХрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░:

class Cipher
{
    // Has properties and update, but Initialize and Finish aren't present
}
class Encryptor : Cipher
{
    void Initialize(ReadOnlySpan<byte> key, ReadOnlySpan<byte> iv);
    void Finish(ReadOnlySpan<byte> input, Span<byte> output, Span<byte> tag);
}
class Decryptor : Cipher
{
   void Initialize(ReadOnlySpan<byte> key, ReadOnlySpan<byte> iv, ReadOnlySpan<byte> tag);
   // Throws if tag didn't verify
   void Finish(ReadOnlySpan<byte> input, Span<byte> output);
}
class AesGCMEncryptor : Encryptor {}
class AesGCMDecryptor : Decryptor {}
}

рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдЕрдЧрд░ рдпрд╣ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдкрд░ рдмрдлрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИ рдХрд┐ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЯреИрдЧ рдЪреЗрдХ рд╣реЛ рдЧрдпрд╛ рд╣реИ? рдХреНрдпрд╛ рдЕрдкрдбреЗрдЯ рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХрд╛ рд╕рдордп рд╣реИ? рдХреНрдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рдирд┐рдкрдЯрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? (рдирд┐рдкрдЯрд╛рди рдереЛрдбрд╝рд╛ рдЦрддрд░рдирд╛рдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рддрдХ рдЖрдк рд╡рд╕реНрддреБ рдХрд╛ рдирд┐рдкрдЯрд╛рди рдХрд░рддреЗ рд╣реИрдВ рддрдм рддрдХ рдЖрдк рдбреЗрдЯрд╛ рдкрд░ рдкрд╣рд▓реЗ рд╣реА рднрд░реЛрд╕рд╛ рдХрд░ рдЪреБрдХреЗ рд╣реЛрдВрдЧреЗ)

рдЬрд╣рд╛рдБ рддрдХ рдирд╛рдордХрд░рдг рдХреА рдмрд╛рдд рд╣реИ, рд╣рдорд╛рд░реА рдорд┐рд╕рд╛рд▓ рд╕рд┐рдореЗрдЯреНрд░рд┐рдХ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдФрд░ рдПрд╕рд┐рдореЗрдЯреНрд░рд┐рдХ рдПрд▓реНрдЧреЛрд░рд┐рдердо рд╣реИред рдпрджрд┐ рдпрд╣ рдПрдИрдПрдбреА рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИ, рддреЛ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рдкреНрд░рдорд╛рдгрд┐рдд рд╕рдордорд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рдердо рдпрд╛ рдкреНрд░рдорд╛рдгреАрдХреГрдд рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдердо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рдФрд░ рдПрдкреАрдЖрдИ рд╡рд┐рдЪрд╛рд░:

public interface IAEADConfig
{
    // size of the input block (plaintext)
    int BlockSize { get; }

    // size of the output per input-block;
    // typically a multiple of BlockSize or equal to BlockSize.
    int FeedbackSize { get; }

    // IV size; CAESAR completition uses a fixed-length IV
    int IVSize { get; }

    // CAESAR competition uses a fixed-length key
    int KeySize { get; }

    // CAESAR competition states that typical AEAD ciphers have a constant gap between plaintext length
    // and ciphertext length, but the requirement is to have a constant *limit* on the gap.
    int MaxTagSize { get; }

    // allows for AE-only algorithms
    bool IsAdditionalDataSupported { get; }
}

public interface ICryptoAEADTransform : ICryptoTransform
{
    // new AEAD-specific ICryptoTransform interface will allow CryptoStream implementation
    // to distinguish AEAD transforms.
    // AEAD decryptor transforms should throw on auth failure, but current CryptoStream
    // logic swallows exceptions.
    // Alternatively, we can create a new AEAD_Auth_Failed exception class, and
    // CryptoTransform is modified to catch that specific exception.
}

public interface IAEADAlgorithm : IDisposable, IAEADConfig
{
    // separates object creation from initialization/keying; allows for unkeyed factories
    void Initialize(ArraySegment<byte> key);

    void Encrypt(
        ArraySegment<byte> iv, // readonly; covered by authentication
        ArraySegment<byte> plaintext, // readonly; covered by authentication
        ref ArraySegment<byte> ciphertext, // must be of at least [plaintext_length + MaxTagSize] length. iv is not part of ciphertext.
        ArraySegment<byte> additionalData = default(ArraySegment<byte>) // readonly; optional; covered by authentication
        ); // no failures expected under normal operation - abnormal failures will throw

    bool Decrypt(
        ArraySegment<byte> iv, // readonly
        ArraySegment<byte> ciphertext, // readonly
        ref ArraySegment<byte> plaintext, // must be of at least [ciphertext_length - MaxTagSize] length.
        ArraySegment<byte> additionalData = default(ArraySegment<byte>), // readonly; optional
        bool isAuthenticateOnly = false // supports Authentication-only mode
        );// auth failures expected under normal operation - return false on auth failure; throw on abnormal failure; true on success

    /*  Notes:
        * Array.LongLength should be used instead of Array.Length to accomodate byte arrays longer than 2^32.
        * Ciphertext/Plaintext produced by Encrypt()/Decrypt() must be determined *only* by method inputs (combined with a key).
          - (ie. if randomness or other hidden inputs are needed, they must be a part of iv)
        * Encrypt()/Decrypt() are allowed to write to ciphertext/plaintext segments under all conditions (failure/success/abnormal)
          - some implementations might be more stringent than others, and ex. not leak decrypted plaintext on auth failures
    */

    ICryptoAEADTransform CreateEncryptor(
        ArraySegment<byte> key,
        ArraySegment<byte> iv,
        ArraySegment<byte> additionalData = default(ArraySegment<byte>)
        );

    ICryptoAEADTransform CreateDecryptor(
        ArraySegment<byte> key,
        ArraySegment<byte> iv,
        ArraySegment<byte> additionalData = default(ArraySegment<byte>)
        );

    // Streaming AEAD can be done with good-old CryptoStream
    // (possibly modified to be AEAD-aware).
}

@sdrapkin , рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рдпреЛрдЧрджрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЖрдкрдХреЗ рдПрдкреАрдЖрдИ рдореЗрдВ рдЯреИрдЧ рдХрд╣рд╛рдВ рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдП? рдХреНрдпрд╛ рд╡реЗ рдкрд░реЛрдХреНрд╖ рд░реВрдк рд╕реЗ рд╕рд┐рдлрд░рдЯреЗрдХреНрд╕реНрдЯ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ? рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реЗ рд╣реИ рдЬреЛ рдХреБрдЫ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдореИрдВ рдпрд╣ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд▓реЛрдЧ рдХреМрди рд╕реЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд░ рдзреНрдпрд╛рди рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдирд┐рд╣рд┐рдд рдЯреИрдЧ рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ рдпрд╛ рдпрджрд┐ рдЗрд╕реЗ рдЕрд▓рдЧ рд╕реЗ рд▓реЗ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

@morganbr рдореИрдВрдиреЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ/рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рд╕рдорд╕реНрдпрд╛ рдкрд░ рднреА рдзреНрдпрд╛рди рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЖрдЬ рд░рд╛рдд рдЖрдкрдХреЗ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд▓рд┐рдП рдЗрддрдиреА рдЦреБрд╢реА рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рдерд╛ред рдореИрдВ рдХрдХреНрд╖рд╛ рдореЗрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмреЗрд╣рддрд░ рдЖрдХреНрд░рд╛рдордХ рд░реАрд╕рд╛рдЗрдХреНрд▓рд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП рдмрдлрд░ рдФрд░ IV рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ)ред

рдирд┐рдкрдЯрд╛рди рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдЪреЗрдХ рдХреЗ рд░реВрдк рдореЗрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдХрд┐рд╕реА рдСрдкрд░реЗрд╢рди рдХреЗ рдЕрдВрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред

@sdrapkin рдЗрдВрдЯрд░рдлреЗрд╕ рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдкрд╣рд▓реЗ рдмрддрд╛рдИ рдЧрдИ рд╕рдВрд╕реНрдХрд░рдг рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрд╛рд░рдг рдирд╣реАрдВ рдЬрд╛рдирд╛ рд╣реИред рдЬрдм рддрдХ рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдореНрдкреНрд▓рд╛рдВрдЯреЗрд╢рди рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░реЗрд╖рдг рдзреАрдорд╛ рд╣реИ .. рд╕рд░рдгреА рдЦрдВрдб рднреА рд╣рдорд╛рд░реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдкреИрди рдЕрдзрд┐рдХ рдмрд╣реБрдореБрдЦреА рдирд┐рдЪрд▓рд╛ рдЖрджрд┐рдо рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдмрд╛рдж рдореЗрдВ рдорд╛рдВрдЧ рд╣реЛрдиреЗ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╕рд░рдгреА рд╕реЗрдЧрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЖрдкрдХреА рдХреБрдЫ рд╕рдВрдкрддреНрддрд┐рдпрд╛рдВ рд░реБрдЪрд┐рдХрд░ рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рдЬрдм рдореИрдВ рдЕрдкрдиреЗ рдлреЛрди рдХреЗ рдмрдЬрд╛рдп рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рд╣реВрдВ рддреЛ рдЕрдкрдбреЗрдЯ рд╣реЛ рдЬрд╛рдПрдВрдЧреАред

рд╣рд░ рддрд░рдл рдЕрдЪреНрдЫреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛!

@morganbr рдЯреИрдЧ рд╕рд┐рдлрд░рдЯреЗрдХреНрд╕реНрдЯ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВред рдпрд╣ CAESAR API (рдЬрд┐рд╕рдореЗрдВ AES-GCM рд╢рд╛рдорд┐рд▓ рд╣реИ) рдХреЗ рдмрд╛рдж рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

@Drawaes рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ - рдореИрдВ рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐рдпреЛрдВ/рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдХреБрд▓ рдареАрдХ рд╣реВрдВред рдЕрд╡рдзрд┐рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛрдирд╛ред рдореБрдЭреЗ рдЗрд╕ рдмрд╛рдд рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ - рдпрд╣ рдиреЗрдЯрд╕реНрдЯреИрдВрдбрд░реНрдб 2 рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп .NET рдореЗрдВ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЧрдВрднреАрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВ (рд╣рд╛рдБ, рд╣рд╛рдБ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрд░ рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрд░ рдПрдХ рдЦрд┐рд▓реМрдирд╛ рд╣реИ рдЕрднреА рдХреЗ рд▓рд┐рдП)ред рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╕реНрдкреИрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАрдЬрдм рдореИрдВ рдЗрд╕реЗ рджреЗрдЦрддрд╛ рд╣реВрдВ - рддрдм рддрдХ ArraySegmentрдирд┐рдХрдЯрддрдо рдиреЗрдЯрд╕реНрдЯреИрдВрдбрд░реНрдб рдПрдкреАрдЖрдИ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд╣рд╛рдЬ рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рд╕реАрдПрдИрдПрд╕рдПрдЖрд░ рдПрдкреАрдЖрдИ рдкрд░ рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ рдЬреЛ рдЙрдкрдпреЛрдЧреА рд╣реИред

рд╕реНрдкреИрди рдХреЗ рд▓рд┐рдП, рдпрд╣ 2.1 рд╕рдордп рд╕реАрдорд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╢рд┐рдкрд┐рдВрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЙрд╕реА рд╕рдордп рдЗрд╕ рдПрдкреАрдЖрдИ рдХрд╛ рдкрд╣рд▓рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬрд╣рд╛рдЬ рдЬрд╛рдПрдЧрд╛ (рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рд╕рдВрднрд╡ рд╕рдордп)ред

рдпрджрд┐ рдЖрдк рд╡рд░реНрддрдорд╛рди рдкреНрд░реАрд░рд┐рд▓реАрдЬрд╝ рдирдЧреЗрдЯ рдкреИрдХреЗрдЬ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ рддреЛ рдпрд╣ .net рдорд╛рдирдХ 1.0 рддрдХ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдФрд░ рд░рд┐рд▓реАрдЬрд╝ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдХреЛрдИ рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рд╣реИред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ @stephentoub рдЗрд╕ рдмрд╛рдд рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдмреЛрд▓рддреЗ рд╣реИрдВ, рд╡рд╣ рд╕реНрдкреИрди рдЖрдзрд╛рд░рд┐рдд рдПрдкреАрдЖрдИ рдХреЛ рдкреВрд░реЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

(рд╕реНрдкреИрди рдХреЗ рд▓рд┐рдП Nuget)[https://www.nuget.org/packages/System.Memory/4.4.0-preview2-25405-01]

рддреЛ рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдирдП рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдПрдХрдорд╛рддреНрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдлрд┐рд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдЖрджрд┐ рдХреЛ рдПрдХ ArraySegment рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдкрдиреЗ рдРрд╕рд╛ рдЪреБрдирд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдЙрдкрдпреЛрдЧреА рд╣реИ рддреЛ рдЗрд╕реЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдПрдХ ArraySegment рдХреЛ рдПрдХ рд╕реНрдкреИрди рдореЗрдВ рдмрджрд▓рдирд╛ рдЫреЛрдЯрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рддрд░рдл рдбреЗрдЯрд╛ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЙрдкрд░реЛрдХреНрдд рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдореБрдЭреЗ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рд╣реИ, рд╡рд╣ рдХрд┐рд╕реА рднреА "рдЦрдВрдбрд┐рдд" рдбреЗрдЯрд╛ рдкрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдкрджрд╛ рд╣реЛрдЧреАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдиреЗрдЯрд╡рд░реНрдХ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХрд╣реЗрдВ, рдпрджрд┐ рдПрдХ рдкреНрд░рдорд╛рдгреАрдХреГрдд рдмреНрд▓реЙрдХ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдХрдИ рд░реАрдбреНрд╕ рдкрд░ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИ, рддреЛ рдореБрдЭреЗ рдЗрд╕реЗ рдПрдХ рд╣реА [рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдбрд╛рд▓реЗрдВ] рдореЗрдВ рдмрдлрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ/рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЙрд╕ рдбреЗрдЯрд╛ рдкрд░ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╢реВрдиреНрдп рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХрд░рдиреЗ рдХреЗ рд╕рднреА рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЛ рд╣рд░рд╛ рджреЗрддрд╛ рд╣реИред

рдиреЗрдЯрд╡рд░реНрдХрд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдЬреИрд╕реЗ рдХрд┐ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд▓рдЧрднрдЧ рд╕рднреА рдкреНрд░рддрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЕрдЧрд░ рд╡реЗ рдЗрд╕ рдПрдкреАрдЖрдИ рдореЗрдВ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдХреНрд░рд┐рдкреНрдЯреЛ рд╣рд┐рдЯ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╡рд╣ рд╕рдм рдЦрддреНрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрд▓рдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ (рдпрд╛ рдмреИрдЧ) рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ рдореМрдЬреВрдж рдПрдХ рдЕрдиреНрдп рдПрдкреАрдЖрдИ рдкрд░ рд╣рд╛рд▓ рдХреА рдЪрд░реНрдЪрд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИред рдореИрдВ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рд╡рд┐рд░реЛрдз рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЕрдЧрд░ рдпрд╣ рдмрдврд╝рддрд╛ рд╣реИ рддреЛ рдореБрдЦреНрдп рд╡рд╕реНрддреБ рдкрд░ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХрд╛ рд╣реЛрдирд╛ рдПрдХ рдЧрдбрд╝рдмрдбрд╝ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдореЗрд░реЗ рд╕рд╛рде рдПрдХ рджреЛ рдмрд╛рддреЗрдВ рд╣реБрдИ рд╣реИрдВред

  • рд╡рд░реНрддрдорд╛рди рдкреНрд░рд╕реНрддрд╛рд╡ рдЯреИрдЧрд╕рд╛рдЗрдЬ рдХреЛ рдПрдХ рдЖрдЙрдЯ рд╡реИрд▓реНрдпреВ (рдареАрдХ рд╣реИ, рдХреЗрд╡рд▓-рдкреНрд░рд╛рдкреНрдд-рд╕рдВрдкрддреНрддрд┐) рдХрд╣рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬреАрд╕реАрдПрдо рдФрд░ рд╕реАрд╕реАрдПрдо рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдирдкреБрдЯ рд╣реИ (рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рдЖрдкрдиреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЯреИрдЧ рдХреА рдЖрдкреВрд░реНрддрд┐ рдХреА рд╣реИ)ред
  • рдкреНрд░рд╕реНрддрд╛рд╡ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдПрдХ рд╣реА рд╕рдордп рдФрд░ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

    • IIRC CCM рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ (рд╕рд╛рджреЗ рдЯреЗрдХреНрд╕реНрдЯ рдХреА рд▓рдВрдмрд╛рдИ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЗ рдкрд╣рд▓реЗ рдЪрд░рдг рдореЗрдВ рдПрдХ рдЗрдирдкреБрдЯ рд╣реИ)ред

    • рдЧрджреНрджреЗрджрд╛рд░ рдореЛрдб (рдХрдо рд╕реЗ рдХрдо рдПрдХ) рдмреНрд▓реЙрдХ рджреНрд╡рд╛рд░рд╛ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рд▓реИрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрдм рддрдХ рдХрд┐ рдлрд╛рдЗрдирд▓ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡реЗ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдХреНрдпрд╛ рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рдЖ рд░рд╣рд╛ рд╣реИ / рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рдмреНрд▓реЙрдХ рдХреЛ рдкреИрдбрд┐рдВрдЧ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

  • рдХреБрдЫ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдСрдкрд░реЗрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдбреА рддрддреНрд╡ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рджреЗрд░ рд╕реЗ рдмрд╛рдзреНрдп рдПрд╕реЛрд╕рд┐рдПрд╢рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдЗрдирд┐рдЯ/рд╕реАрдЯреАрдЖрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рддрд░рд╣ рдмрдирд╛рддреЗ рд╣реИрдВред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХрдВрдЯреЗрдирд░ рдкреНрд░рд╛рд░реВрдкреЛрдВ (EnvelopedCms, EncryptedXml) рдХреЛ рдХреБрдВрдЬреА рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдпрд╛ рдпрджрд┐ рдЗрд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдФрд░ рдЗрд╕реЗ рдпрд╛рдж рд░рдЦрдирд╛ рдЙрдирдХреЗ рдКрдкрд░ рд╣реЛрдЧрд╛ (рдЬрдм рддрдХ рдЙрдиреНрд╣реЗрдВ рдЗрд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ)ред

(рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдХрд▓ рдЗрд╕ рдкрд░ "рдЯрд┐рдкреНрдкрдгреА" рдмрдЯрди рдирд╣реАрдВ рдорд╛рд░рд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП 1910Z рдкрд░ "рдореИрдВрдиреЗ рдХреБрдЫ рдмрджрд▓рд╛рд╡ рдХрд┐рдП рд╣реИрдВ" рдХреЗ рдмрд╛рдж рдпрд╣ рдХреБрдЫ рднреА рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛)

рд╕рд╣реА рдЯреИрдЧ рдЖрдХрд╛рд░ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдорд╛рдирд╛ред

рдпрджрд┐ рд╣рдо рдЕрднреА рдХреЗ рд▓рд┐рдП рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рдЖрдк рд╕рд╣реА рд╣реИрдВ рдХрд┐ рдХреБрдЫ рд╕рд┐рдлрд░ рдХреБрдЫ рднреА рдХрдо рдпрд╛ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд▓реМрдЯрд╛рдПрдВрдЧреЗред рдпрджрд┐ рдЖрдк рдкрд░реНрдпрд╛рдкреНрдд рдмрдлрд╝рд░ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╢реНрди рд╣реИред

рд╕реНрдкреИрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдирдП рдЯреЗрдХреНрд╕реНрдЯрдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдЗрдВрдЯрд░рдлреЗрд╕ рдкрд░ рдПрдХ рд╕реБрдЭрд╛рд╡ рдерд╛ рдХрд┐ рд░рд┐рдЯрд░реНрди рдЯрд╛рдЗрдк рдПрдХ рдПрдирдо рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЬрдЧрд╣ рдереА рдпрд╛ рдирд╣реАрдВ, рдФрд░ рдЖрдХрд╛рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп "рдЖрдЙрдЯ" рдкреИрд░рд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдПрдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред

рд╕реАрд╕реАрдПрдо рдорд╛рдорд▓реЗ рдореЗрдВ рдореИрдВ рдмрд╕ рдЗрддрдирд╛ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдмрдлрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдлрд┐рдирд┐рд╢ рдХреЛ рдХреЙрд▓ рди рдХрд░реЗрдВ, рдЬрд┐рд╕ рдмрд┐рдВрджреБ рдкрд░ рд╡рд╣ рдкреВрд░реЗ рд▓реЙрдЯ рдХреЛ рдбрдВрдк рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдЧрд╛ред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╣реА рдмреНрд▓реЙрдХ рдореЗрдВ рд╕рднреА рдбреЗрдЯрд╛ рд╣реИрдВ (рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдПрдХ рдмреЗрд╣рддрд░ рдирд╛рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рддреЛ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдХреЙрд▓ рдлрд┐рдирд┐рд╢ рдХреЛ рдЕрдкрдиреА рдкрд╣рд▓реА рдХреЙрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИред рдпрд╛ рдпрджрд┐ рдЖрдк рдЙрди рд╕рд┐рдлрд░ рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдлреЗрдВрдХрдирд╛ рд╕рдВрднрд╡ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрджрд┐ рдЖрдк рд╕реАрд╕реАрдПрдо рдкрд░ рдирд┐рд░рдВрддрд░рддрд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╕реАрдПрдирдЬреА рдПрдХ рдЕрдорд╛рдиреНрдп рдЖрдХрд╛рд░ рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИред

рдЬрдм рдЯреИрдЧ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдкрд░ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЕрдХреНрд╕рд░ рдЗрд╕реЗ рддрдм рддрдХ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдкреВрд░реЗ рдкреИрдХреЗрдЯ рдХреЛ рдирд╣реАрдВ рдкрдврд╝ рд▓реЗрддреЗ рд╣реИрдВ, рдЕрдЧрд░ рд╣рдо рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЯреАрдПрд▓рдПрд╕ рд▓реЗрддреЗ рд╣реИрдВ рддреЛ рд╣рдореЗрдВ рдЕрдВрдд рдореЗрдВ рдЯреИрдЧ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП 8 * 2k рдиреЗрдЯрд╡рд░реНрдХ рдкреИрдХреЗрдЯ рдкрдврд╝рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИред рдПрдХ 16k рдмреНрд▓реЙрдХ рдХрд╛ред рдЗрд╕рд▓рд┐рдП рдЕрдм рд╣рдореЗрдВ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреВрд░реЗ 16k рдХреЛ рдмрдлрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдУрд╡рд░рд▓реИрдк рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдореМрдХрд╛ рдирд╣реАрдВ рд╣реИ (рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЯреАрдПрд▓рдПрд╕ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд┐рдлрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдИрдУ рдмрд╛рдзреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрдо рд╣реИ, рдЪрд╛рд╣реЗ рд╡рд╣ рдбрд┐рд╕реНрдХ рд╣реЛ рдпрд╛ рдиреЗрдЯрд╡рд░реНрдХ)ред

@Drawaes рд░реЗред рдЦрдВрдбрд┐рдд рдзрд╛рд░рд╛рдПрдБ рдФрд░ рдмрдлрд░рд┐рдВрдЧ рд╕реАрдорд╛рдПрдБ:
рдЖрдкрдХреЛ рдЕрдкрдиреА рд▓рдбрд╝рд╛рдИ рдЪреБрдирдиреА рд╣реЛрдЧреАред рдЖрдк рдПрдИ рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╣рд░ рдПрдХ рдЕрдЪреНрдЫреЗ рд▓рдХреНрд╖реНрдп рдХреЗ рд╕рд╛рде рд╕рдВрд░реЗрдЦрд┐рдд рдПрдХ рдПрдХреАрдХреГрдд рдПрдкреАрдЖрдИ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ - рдФрд░ рдРрд╕реЗ рдХрдИ рд▓рдХреНрд╖реНрдп рд╣реИрдВред рднреВрддрдкреВрд░реНрд╡ред рдЗрдиреНрдлрд░реНрдиреЛ рдореЗрдВ рдПрдХ рд╕рднреНрдп рдЦрдВрдбрд┐рдд AEAD рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд┐рд╕реА рднреА рдЦрд┐рдВрдЪрд╛рд╡ рд╕реЗ рдорд╛рдирдХ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдРрд╕рд╛ рдорд╛рдирдХ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░, рд▓рдХреНрд╖реНрдп "рд╕реБрд░рдХреНрд╖рд┐рдд рдЪреИрдирд▓" рд╣реИ (рджреЗрдЦреЗрдВ рдпрд╣ , рдпрд╣ , рдФрд░ рдпрд╣ )ред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдореЗрдВ рдЕрднреА рдХреЗ рд▓рд┐рдП рдЫреЛрдЯрд╛ рд╕реЛрдЪрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдорд╛рдирдХреАрдХрд░рдг рдХреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рд▓рд┐рдП рдЪрдВрдХрд┐рдВрдЧ/рдмрдлрд░-рд▓рд┐рдорд┐рдЯрд┐рдВрдЧ рд░рдбрд╛рд░ рдкрд░ рднреА рдирд╣реАрдВ рд╣реИ (" рдмрдбрд╝реЗ рдкреНрд▓реЗрдирдЯреЗрдХреНрд╕реНрдЯ рд╡рд╛рд▓реЗ AEADs " рд╕реЗрдХреНрд╢рди) ..

рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди/рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдСрдкрд░реЗрд╢рдВрд╕ рдореВрд▓ рд░реВрдк рд╕реЗ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИрдВред рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдмрдлрд╝рд░реНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдпреЗ рдЗрди-рдкреНрд▓реЗрд╕ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ (рдЖрдЙрдЯрдкреБрдЯ рдмрдлрд╝рд░реНрд╕ рдЗрдирдкреБрдЯ рдмрдлрд╝рд░реНрд╕ рд╕реЗ рдмрдбрд╝реЗ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП - рдХрдо рд╕реЗ рдХрдо рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо рдХреЗ рд▓рд┐рдП)ред

RFC 5116 рднреА рд░реБрдЪрд┐ рдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

@Drawaes , рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рдЖрдк рдЯреАрдПрд▓рдПрд╕ рд▓рд╛рддреЗ рд╣реИрдВред рдореИрдВ рддрд░реНрдХ рджреВрдВрдЧрд╛ рдХрд┐ рдПрд╕рдПрд╕рдПрд▓рд╕реНрдЯреНрд░реАрдо (рдХреНрдпрд╛ рдпрд╣ рдЗрд╕ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛) рдХреЛ рдХрд┐рд╕реА рднреА рдЕрдирдзрд┐рдХреГрдд рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкрд╛рд╕ рд╕реНрд╡рдпрдВ рдХрд╛ рдмрдЪрд╛рд╡ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдЬрд╝рд░реВрд░, рд▓реЗрдХрд┐рди рд╡рд╣ SSLStreams рд╕рдорд╕реНрдпрд╛ рд╣реИред рдореИрдВрдиреЗ рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЗрд╕ рд╕рдЯреАрдХ рдЪреАрдЬрд╝ (рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реНрддрд░ рдкрд░ рд╕реАрдПрдирдЬреА рдФрд░ рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рдХреЛ рдХреНрд░рд┐рдкреНрдЯреЛ рдмрд┐рдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдЯреАрдПрд▓рдПрд╕) рдХреЛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рд╣реИред рддрд░реНрдХ рдмрд╣реБрдд рд╕рд░рд▓ рдерд╛, рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдбреЗрдЯрд╛ рдЖрддрд╛ рд╣реИ, рдЬрдЧрд╣ рдореЗрдВ рдмрдлрд░ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░реЗрдВ, рдЖрдЙрдЯ рдмрд╛рдЙрдВрдб рд╕реЗ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВ рдФрд░ рдЬрдм рддрдХ рдЖрдк рдЯреИрдЧ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рдЬрд╛рддреЗ рддрдм рддрдХ рджреЛрд╣рд░рд╛рдПрдВред рдЯреИрдЧ рдХреЙрд▓ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░...

рдЕрдЧрд░ рдпрд╣ рдкрд╛рдЗрдк рд▓рд╛рдЗрди рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдлреЗрдВрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рддреЛ рдлреНрд▓рд╢ рдЕрдЧрд▓реЗ рдЪрд░рдг рдХреЛ рдЙрд╕реА рдзрд╛рдЧреЗ рдкрд░ рдпрд╛ рдкреНрд░реЗрд╖рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдкрд░ рдЬрд╛рдиреЗ рдХреА рдЗрдЬрд╛рдЬрдд рджреЗрддрд╛ рд╣реИред

рдореЗрд░реА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдкреНрд░рдорд╛рдг рдкреНрд░рд╛рдЗрдордЯрд╛рдЗрдо рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реА рдкреНрд░рддрд┐рдпреЛрдВ рдЖрджрд┐ рд╕реЗ рдмрдЪрдиреЗ рд╕реЗ рдпрд╣ рдмрд╣реБрдд рд╣реА рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд░реНрд╢рди рдмрдврд╝рд╛;)

рдХрд┐рд╕реА рднреА рдиреЗрдЯрд╡рд░реНрдХрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рдЪреАрдЬреЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдмрдлрд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддреА рд╣реИрдВ рдФрд░ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реА рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдЧреЗ рдмрдврд╝ рд░рд╣реЗ рд╣реИрдВред

рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рдХреЗ рдХреНрд░рд┐рдкреНрдЯ, рдФрд░ рд╕реАрдПрдирдЬреА рдореЗрдВ рдПрдХ рд╣реА рд╡рд┐рдзрд┐ рдЕрдкрдбреЗрдЯ, рдЕрдкрдбреЗрдЯ, рдлрд┐рдирд┐рд╢ рд╣реИред рдЪрд░реНрдЪрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдлрд┐рдирд┐рд╢ рдЯреИрдЧ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЕрджреНрдпрддрди рдмреНрд▓реЙрдХ рдЖрдХрд╛рд░ (рд╕реАрдПрдирдЬреА рдХреЗ рд▓рд┐рдП) рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмреНрд▓реЙрдХ рдЖрдХрд╛рд░ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдмрдлрд░рд┐рдВрдЧ рдХрд░рддрд╛ рд╣реИред

рдЪреВрдВрдХрд┐ рд╡реЗ рдЖрджрд┐рдо рд╣реИрдВ, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдЙрдирд╕реЗ рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдВрдЧреЗред рдпрджрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрджрд┐рдо рдХреЗ рдмрдЬрд╛рдп рдПрдХ "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛" рд╕реНрддрд░ рдПрдкреАрдЖрдИ рдбрд┐рдЬрд╛рдЗрди рдХрд░ рд░рд╣реЗ рдереЗ, рддреЛ рдореИрдВ рддрд░реНрдХ рджреВрдВрдЧрд╛ рдХрд┐ рдкреНрд░рдореБрдЦ рдкреАрдврд╝реА, IV рдирд┐рд░реНрдорд╛рдг рдФрд░ рд╕рдВрдкреВрд░реНрдг рдкреНрд░рдорд╛рдгрд┐рдд рднрд╛рдЧ рд╕рднреА рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдПрдкреАрдЖрдИ рдХрд╛ рд▓рдХреНрд╖реНрдп рд╕реНрддрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реИред

рдЧрд▓рдд рдмрдЯрди

@blowdart , рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдЧреИрд░ рдкреНрд░рдмрдВрдзрди рдкрд░ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдЪрд╛рд░ рдереЗред

рддреЛ рдЧреИрд░ рдкреНрд░рдмрдВрдзрди рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдФрд░ рдЙрдирдХреЗ рд╕реЗрдЯрдЕрдк рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИред

рддреЛ ... рдЗрд╕реЗ рдПрдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдмрдирд╛рдУред рдЖрдкрдХреЛ рдЧреИрд░ рдкреНрд░рдмрдВрдзрди рдореЗрдВ рдкреНрд▓рдЧ рдЗрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ ... рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдпрд╛ рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЖрдкреВрд░реНрддрд┐ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдпрд╣, рдмрдЬрд╛рдп рдПрдХ рд╕рд╛рдзрд╛рд░рдг

cipher.Init(myKey, nonce);

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЗрд╢рд╛рд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЬреЛрдЦрд┐рдо рдХреЛ рд╕рдордЭреЗрдВред

@blowdart рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдЧреИрд░ рдкреНрд░рдмрдВрдзрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдФрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рджреЛрдиреЛрдВ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рд╣реЛрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╣ рд╕рдордЭреЗрдВ рдХрд┐ рдЧреИрд░ рдкреНрд░рдмрдВрдзрди рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХреБрдЫ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ?

interface INonceProvider
{
    public void GetNextNonce(Span<byte> writeNonceHere);
}

class AesGcmCipher : Cipher
{
    public AesGcmCipher(ReadOnlySpan<byte> key, INonceProvider nonceProvider);
}

// Enables platform-specific hardware keys
class AesGcmCng : Cipher
{
    public AesGcmCng(CngKey key, INonceProvider nonceProvider);
}

// Example of AEAD that might not need a nonce
class AesCBCHmac : Cipher
{
    public AesCBC(ReadOnlySpan<byte> key)
}

class Cipher
{
    // As above, but doesn't take keys, IVs, or nonces
}

рд▓реЗрдХрд┐рди INonceProvider рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЗрдВрдЯреАрдлреЗрд╕/рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЕрдЧрд░ рдЗрдирд┐рдЯ рд╕рд┐рд░реНрдл рдХреЛрдИ рдирд╣реАрдВ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдХрд┐рд╕реА рднреА рдмреНрд▓реЙрдХ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдХреНрдпрд╛ рдпрд╣ рдЕрддрд┐рд░рд┐рдХреНрдд/рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдирд╣реАрдВ рд╣реИ?

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдХреЛрдИ рдХреНрд░рд┐рдкреНрдЯреЛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдПрдИрдПрд╕ рдХреЛ IV рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ (рдЬреЛ рдПрдХ рдЧреИрд░ рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?)

рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕/рдкреНрд░рдХрд╛рд░ рд╣реИ

рдРрд╕реА рдмрд╛рдд рд╣реИред рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ _nonce рдкреНрд░рдмрдВрдзрди_ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рди рдХрд┐ рдХреЗрд╡рд▓ рд╢реВрдиреНрдп рдпрд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмрд╛рдЗрдЯ рд╕рд░рдгреА рдореЗрдВ рдЧреБрдЬрд░рдирд╛ред рдпрд╣ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЛ рд░реЛрдХрдиреЗ рдореЗрдВ рднреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рд▓реЛрдЧ GetNextNonce рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ "рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреБрдЫ рдЕрд▓рдЧ рд▓реМрдЯрд╛рдПрдВ"ред

рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рднреА рд╕рд╣рд╛рдпрдХ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЧреИрд░ рдкреНрд░рдмрдВрдзрди рд╕рдорд╕реНрдпрд╛рдПрдВ рдирд╣реАрдВ рд╣реИрдВ (рдЬреИрд╕реЗ рдПрдИрдПрд╕ рдПрд╕рдЖрдИрд╡реА рдпрд╛ рд╢рд╛рдпрдж рдПрдИрдПрд╕ + рд╕реАрдмреАрд╕реА + рдПрдЪрдПрдордПрд╕реА)ред

рд╕рдЯреАрдХ IV/рдЧреИрд░-рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдореЛрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рднрд┐рдиреНрди рд╣реЛрддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

  • рдПрдИрдПрд╕ рдИрд╕реАрдмреА рдХреЛ рдЧреИрд░ рдпрд╛ IV рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ
  • рдПрдИрдПрд╕ рдЬреАрд╕реАрдПрдо рдХреЛ 96-рдмрд┐рдЯ рдиреЙрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕реЗ рдХрднреА рднреА рдкреБрди: рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдХреБрдВрдЬреА рдЯреВрдЯрдиреЗ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЬрдм рддрдХ рдЧреИрд░ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрдм рддрдХ рдХрдо рдПрдиреНрдЯреНрд░реЙрдкреА рдареАрдХ рд╣реИред
  • рдПрдИрдПрд╕ рд╕реАрдмреАрд╕реА рдХреЛ 128-рдмрд┐рдЯ IV рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ IV рджреЛрд╣рд░рд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХреЗрд╡рд▓ рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╡рд╣реА рд╕рдВрджреЗрд╢ рдкрд╣рд▓реЗ рднреЗрдЬрд╛ рдЧрдпрд╛ рд╣реИред
  • рдПрдИрдПрд╕ рдПрд╕рдЖрдИрд╡реА рдХреЛ рд╕реНрдкрд╖реНрдЯ IV рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрд╕реЗ рдЕрдиреНрдп рдЗрдирдкреБрдЯ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред

рдПрдИрдПрд╕ рд╕реАрдмреАрд╕реА рдХреЛ IV рдЪрд╛рд╣рд┐рдП рдирд╛? рддреЛ рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╡реЗрдХреНрдЯрд░рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рд╣реЛрдЧрд╛? рдпрд╣ рдПрдХ рдЧреИрд░ рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди
рдЕрдВрддрд┐рдо рдмреНрд▓реЙрдХ рдХреЛ рдЧреИрд░-рдкрд╕рдВрдж рдХрд░рдиреЗ рдФрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЯреАрдПрд▓рдПрд╕ рд╣рдорд▓рд╛ рд╣реБрдЖ рдХреНрдпреЛрдВрдХрд┐ iv рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реАрдмреАрд╕реА рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреНрд░рдорд┐рдХ рдЧреИрд░ рдХрд╣рдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рд╛рдБ, рд▓реЗрдХрд┐рди IV рдПрдХ рдЧреИрд░ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЗ рдкрд╛рд╕ nomce рдкреНрд░рджрд╛рддрд╛ рд╢рдмреНрдж рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

рдореЗрд░рд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рдерд╛ рдХрд┐ рдПрдИрдПрд╕ рд╕реАрдмреАрд╕реА рдХреЛ рдЖрдИрд╡реА рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ-- рдпрд╣ рдХрд░рддрд╛ рд╣реИред рдореЗрд░рд╛ рдорддрд▓рдм рдХреЗрд╡рд▓ рдХреБрдЫ рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдерд╛ рдЬреЛ IV рдХреЛ рдЕрдиреНрдп рдбреЗрдЯрд╛ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИрдВред

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдЖрдо рддреМрд░ рдкрд░ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ ... рдореИрдВ рдкреНрд░рджрд╛рддрд╛ рдХреЛ рдкреВрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ;) рд▓реЗрдХрд┐рди рдпрд╛ рддреЛ рдЗрд╕реЗ рдПрдХ iv рдкреНрд░рджрд╛рддрд╛ рдХрд╣рддреЗ рд╣реИрдВ рдпрд╛ рдЗрд░рд╛рджреЗ рдкрд░ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП 2 рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реИрдВ

@morganbr INonceProvider рд╕рд┐рдлрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реЛрдВ рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд╛рд░рдЦрд╛рдиреЗ рдПрдХ рдЦрд░рд╛рдм рдбрд┐рдЬрд╝рд╛рдЗрди рд╣реИрдВред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрд╕ рддрдереНрдп рдХреЛ рдпрд╛рдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ _nonce_ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ: "_...used ones_" рдмрд╛рдзрд╛ рдореЗрдВ рдПрдХ _context_ рд╣реИред CTR рдФрд░ GCM (рдЬреЛ CTR рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ) рдореЛрдб рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, _nonce_ рдХрд╛ _context_ _key_ рд╣реИред рдЕрд░реНрдерд╛рддред _nonce рдкреНрд░рджрд╛рддрд╛_ рдХреЛ рдПрдХ рдЧреИрд░-рд╡рд╛рдкрд╕реА рд▓реМрдЯрд╛рдиреА рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ _key_ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЪреВрдВрдХрд┐ рдЖрдкрдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдПрдкреАрдЖрдИ рдореЗрдВ INonceProvider рдХреБрдВрдЬреА-рдЬрд╛рдЧрд░реВрдХ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рд╣реА рдиреЙрдирд╕ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреЛ рдХрд┐ рдПрдХ рдЧреИрд░ рдирд╣реАрдВ рд╣реИ, рднрд▓реЗ рд╣реА рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рдЯ рд╕реНрдкреЗрд╕ рдХрд╛рдлреА рдмрдбрд╝рд╛ рдерд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ)ред

рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рдЪрд░реНрдЪрд╛ рд╕реВрддреНрд░ рдХрд╛ рд▓рдХреНрд╖реНрдп рдХреНрдпрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рд╣реИред рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдорд╛рдгрд┐рдд-рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдбрд┐рдЬрд╝рд╛рдЗрди рд╡рд┐рдЪрд╛рд░реЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рддреА рд╣реИ... рдареАрдХ рд╣реИред рдкрд╣рд▓реЗ рд╕реЗ рд╣реА .NET рдХреЛрд░ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдкреНрд░рдорд╛рдгрд┐рдд рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ - рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ ASP.NET API рдореЗрдВ? IAuthenticatedEncryptor , рдЖрджрд┐ рд╣реИред рдЗрди рд╕рднреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдЖрдЬ .NET рдХреЛрд░ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ, рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рдФрд░ рд╢рд┐рдкрд┐рдВрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдбреЗрдЯрд╛рдкреНрд░реЛрдЯреЗрдХреНрд╢рди рдХреНрд░рд┐рдкреНрдЯреЛ рд╕рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЙрдиреНрд╣реЗрдВ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ? рдЙрдиреНрд╣реЗрдВ рдмрджрд▓реЛ? рдЖрддреНрдорд╕рд╛рдд рдпрд╛ рд░рд┐рдлреИрдХреНрдЯрд░?

DataProtection рдХреНрд░рд┐рдкреНрдЯреЛ рдХреЛ @GrabYourPitchforks (рд▓реЗрд╡реА рдмреНрд░реЛрдбрд░рд┐рдХ) рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╡рд╣ рд╡рд┐рд╖рдп рд╡рд╕реНрддреБ рдЬрд╛рдирддрд╛ рд╣реИ, рдФрд░ рдЙрд╕рдХреА рд░рд╛рдп/рдЗрдирдкреБрдЯ/рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЗрд╕ рд╕рдореБрджрд╛рдп рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдореВрд▓реНрдпрд╡рд╛рди рд╣реЛрдЧреАред рдореИрдВ рдХреНрд░рд┐рдкреНрдЯреЛ-рдереАрдо рд╡рд╛рд▓реЗ рдордиреЛрд░рдВрдЬрди рдХрд╛ рдЙрддрдирд╛ рд╣реА рдЖрдирдВрдж рд▓реЗрддрд╛ рд╣реВрдВ рдЬрд┐рддрдирд╛ рдХрд┐ рдХреЛрдИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХреЛрдИ рдХреНрд░рд┐рдкреНрдЯреЛ рдПрдкреАрдЖрдИ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧрдВрднреАрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдордПрд╕ рдЯреАрдо рдореЗрдВ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

@sdrapkin , рдЧреИрд░-рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдЧрд░реВрдХ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЗрди рдПрдкреАрдЖрдИ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЙрдЪрд┐рдд рддрд░реАрдХрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдбреЗрдЯрд╛рдкреНрд░реЛрдЯреЗрдХреНрд╢рди рдПрдХ рдЕрдЪреНрдЫрд╛ рдПрдкреАрдЖрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рдирд┐рд░реНрдорд╛рдг рд╣реИред рдпрд╣ рдкреНрд░рдореБрдЦ рдкреАрдврд╝реА рдФрд░ рдкреНрд░рдмрдВрдзрди, IVs рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдПрдХ рдЕрд▓рдЧ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЬреАрд╕реАрдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ (рдХрд╣рдирд╛) рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдбреЗрдЯрд╛рдкреНрд░реЛрдЯреЗрдХреНрд╢рди рдЗрд╕реЗ рд╕рдВрднрд╡ рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИред

.NET рдХреНрд░рд┐рдкреНрдЯреЛ рдЯреАрдо рдореЗрдВ @bartonjs , @blowdart рдФрд░ рдореИрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдмреЗрд╢рдХ, рдЕрдЧрд░ @GrabYourPitchforks рдЭрдВрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рд╕реНрд╡рд╛рдЧрдд рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред

рдореИрдВ @morganbr рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдпрд╣ рдирд┐рдореНрди рд╕реНрддрд░ рдХрд╛ рдЖрджрд┐рдо рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╢реАрд░реНрд╖рдХ рдореЗрдВ рдХрд╣рддрд╛ рд╣реИ)ред рдЬрдмрдХрд┐ рдбреЗрдЯрд╛ рд╕реБрд░рдХреНрд╖рд╛ рдЖрджрд┐ рдХреЛ рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдкреИрд░ рдореЗрдВ рдЦреБрдж рдХреЛ рд╢реВрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрдВ рдЗрд╕ рдЖрджрд┐рдо рдХреЛ рджреЗрдЦрддрд╛ рд╣реВрдВ рд╡рд╣ рдврд╛рдВрдЪреЗ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЖрдзрд╛рд░ рдкрд░ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рд╣реИред

рдЙрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдкреНрд░рджрд╛рддрд╛ рдареАрдХ рд╣реИ рдЕрдЧрд░ рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рд╕рдордп рдПрдХ рдХреБрдВрдЬреА рдХреА рдЖрдкреВрд░реНрддрд┐ рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдЧрдбрд╝рдмрдбрд╝ рдХрд░ рджреЗрддрд╛ рд╣реИ рдореБрдЭреЗ рдЯреАрдПрд▓рдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдордЭрд╛рддрд╛ рд╣реИ (рдпрд╣ рдиреЗрдЯрд╡рд░реНрдХ рдпрд╛рддрд╛рдпрд╛рдд рдХреЗ рд▓рд┐рдП рдПрдИрдПрд╕ рдмреНрд▓реЙрдХ рдореЛрдб рдХрд╛ рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рдЙрдкрдпреЛрдЧ рд╣реИ)ред

рдореБрдЭреЗ рдПрдХ "рдлреНрд░реЗрдо" рдорд┐рд▓рддрд╛ рд╣реИ (рд╢рд╛рдпрдж рдЗрдВрдЯрд░рдиреЗрдЯ рдХреЗ рдПрдордЯреАрдпреВ ~ 1500 рдХреЗ рд╕рд╛рде 2 + рдЯреАрдпреВ рд╕реЗ рдЕрдзрд┐рдХ)ред рдЗрд╕рдореЗрдВ рдиреЙрди (рдпрд╛ 4 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдиреЙрди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ "рдЫрд┐рдкрд╛ рд╣реБрдЖ") рд╣реЛрддрд╛ рд╣реИ, рдлрд┐рд░ рдореБрдЭреЗ рдЗрд╕ рдорд╛рди рдХреЛ рдПрдХ рд╢реЗрд▓ "рдкреНрд░рджрд╛рддрд╛" рдкрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕рд╛рджрд╛ рдкрд╛рда рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдлрд╝рд░реНрд╕ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рдЕрдкрдиреЗ рдЪрдХреНрд░ рд╕реЗ рдЧреБрдЬрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред .

рдЕрдЧрд░ рдЖрдк рдЗрд╕рд╕реЗ рдЦреБрд╢ рд╣реИрдВ рддреЛ рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рд░рд╣ рд╕рдХрддрд╛ рд╣реВрдВред рдореИрдВ рдЗрд╕реЗ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реВрдВ рддрд╛рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЛ рдЙрд╕ рдЪреАрдЬрд╝ рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдЬрд┐рд╕ рдкрд░ рд╣рдо рд╕рд╣рдордд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдЪрд░реНрдЪрд╛ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЗрд╕ рдкрд░ рдХреВрджрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЦрд╛рд▓реА рд╕рдордп рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред @Drawaes , рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдЙрднрд░рддреА рдмрд╛рддрдЪреАрдд рдХреЗ рд╕реНрд╡рд░реНрдг рдорд╛рдирдХ/рд▓рдХреНрд╖реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд╢реАрд░реНрд╖ рдкрдж рдХреА рдкреБрд╖реНрдЯрд┐/рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореМрдЬреВрджрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдПрдХ рдШрд╛рддрдХ рдореБрджреНрджрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЕрдиреНрдп рдореБрджреНрджреЛрдВ рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЧрдкрд╢рдк рд╣реИред

// current proposed usage
using (var cipher = new AesGcmCipher(bitsize: 256))
{
    cipher.Init(myKey, nonce);
    while (!inputSource.EOF)
    {
        var inputSpan = inputSource.ReadSpan(cipher.BlockSize);
        cipher.Update(inputSpan);
        outputSource.Write(inputSpan);
    }
    cipher.AddAssociatedData(extraInformation); // <= fatal, one can't just do this
    cipher.Finish(finalBlockData);
    cipher.GetTag(tagData);
}

рдпрджрд┐ рдЖрдк рдПрдХ рд╕рдЪреНрдЪреЗ AEAD рдЖрджрд┐рдо рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЧреЛрдкрдиреАрдпрддрд╛ рдбреЗрдЯрд╛ рдФрд░ рдкреНрд░рдорд╛рдгрд┐рдд рдбреЗрдЯрд╛ рдорд┐рд╢реНрд░рд┐рдд рд▓реЙрдХ-рд╕реНрдЯреЗрдк рд╣реИрдВред рдЗрд╕реЗ рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рдбреЗрдЯрд╛ 1 рдФрд░ CipherText1 рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрдИ рдмреНрд▓реЙрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рд░реА рд╣реИ, рди рдХрд┐ рдХреЗрд╡рд▓ 1 рдХреЗ рд▓рд┐рдПредhighlighted

рдЪреВрдВрдХрд┐ рд╕рд╛рд░реА рджреБрдирд┐рдпрд╛ рдПрдХ рдореЗрдо рд╣реИ, рд╡рд┐рд░реЛрдз рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА, рдХреНрд╖рдорд╛ рдХрд░реЗрдВ :)
Can't resist

рд╕рд╛рде рд╣реА, рдПрдкреАрдЖрдИ рдирдП, рдЗрдирд┐рдЯ, рдЕрдкрдбреЗрдЯ рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдЧрдВрджреА рд▓рдЧрддреА рд╣реИред рдореИрдВ рдЗрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдореЙрдбрд▓ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреВрдВрдЧрд╛

// proposed, see detailed comments below
using (var cipher = new AesGcmCipher(myKey, iv, aad)) // 1
{
    // 2
    while (!inputSource.EOF) 
    {
        var inputSpan = inputSource.ReadSpan(16411); // 3
        var outSpan = cipher.Encrypt(inputSpan); // 4
        outputSource.Write(outSpan); 
    }    
    var tag = cipher.Finish(finalBlockData); // 5
}
  1. рдЖрдо рддреМрд░ рдкрд░ рдПрдПрдбреА << рд╕рд╛рджрд╛ рдкрд╛рда рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ cipher.Init(mykey, nonce, aad); рджреЗрдЦрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдкреВрд░реЗ рдПрдПрдбреА рдХреЛ рдмрдлрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╕рд┐рдлрд░ рд╢реЗрд╖ рд╕рдВрднрд╛рд╡рд┐рдд рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ + рд╕реНрдЯреНрд░реАрдо рдкрд░ рдХреНрд░рдВрдЪ рдХрд░рддрд╛ рд╣реИред (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП BCryptEncrypts's CipherModeInfo param )ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, myKey рдХрд╛ рдЖрдХрд╛рд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА AES128, 192, 256 рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдХрд┐рд╕реА рдЕрдиреНрдп рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
  2. рдпрджрд┐ рдХреЙрд▓рд░ рдореМрдЬреВрджрд╛ рд╡рд░реНрдЧ, рдореМрдЬреВрджрд╛ рдПрдИрдПрд╕ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдФрд░ рдПрдИрдПрд╕ рдХреБрдВрдЬреА рд╕рдорд╛рди рд╣реЛрдиреЗ рдкрд░ рдПрдИрдПрд╕ рдЙрдкрдХреБрдВрдЬреА рдкреАрдврд╝реА рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рддреЛ рдЗрдирд┐рдЯ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдПрдкреАрдЖрдИ рдмрди рдЬрд╛рддрд╛ рд╣реИред
  3. рд╕рд┐рдлрд░ рдХреЗ рдПрдкреАрдЖрдИ рдХреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреНрдп рдХреНрд░рд┐рдкреНрдЯреЛ рдПрдкреАрдЖрдИ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдореМрдЬреВрджрд╛ .NET рдПрдкреАрдЖрдИ рдЬреИрд╕реЗ рдмреНрд▓реЙрдХ рдЖрдХрд╛рд░ рдкреНрд░рдмрдВрдзрди рдЖрдВрддрд░рд┐рдХ рд╕реЗ рдХреЙрд▓рд░ рдХреЛ рдврд╛рд▓ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдмрдлрд░ рдЖрдХрд╛рд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреЙрд▓рд░ рдЬреИрд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдЖрдИрдУ 16 рдХреЗ + рдмрдлрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ)ред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдорд╛рдиреНрдпрддрд╛рдУрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдореБрдЦ рд╕рдВрдЦреНрдпрд╛> 16K рдХреЗ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рди рдХрд░рдирд╛
  4. рдЗрдирдкреБрдЯрд╕реНрдкреИрди рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдФрд░ рдЗрдирдкреБрдЯред рддреЛ рдПрдХ рдЖрдЙрдЯрд╕реНрдкреИрди рдХреА рдЬрд░реВрд░рдд рд╣реИ
  5. рдЕрджреНрдпрддрди () рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рддрд╛ рд╣реИ? рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдорд╛рдирд╕рд┐рдХ рдореЙрдбрд▓ рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдЗрдВрдЯрд░рдлреЗрд╕ рд░рдЦреЗрдВред tag рднреА рдЗрд╕ рд╕рдордп рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд╛рдВрдЫрд┐рдд рдбреЗрдЯрд╛ рд╣реИ, рдЙрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдВред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдХрджрдо рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реБрдП, рдХреНрдпреЛрдВ рди рд╕рд┐рд░реНрдл

using (var cipher = new AesGcmCipher(myKey, iv, aad))
{
    var tag = cipher.EncryptFinal(inputSpan, outputSpan);
}

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреГрдкрдпрд╛ INonceProvider рдФрд░ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рд╕реЗ рджреВрд░ рд░рд╣реЗрдВред рдХреНрд░рд┐рдкреНрдЯреЛ рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡ рдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдмрд╕ byte[] iv (рдЫреЛрдЯреЗ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдкрд╕рдВрджреАрджрд╛) рдпрд╛ Span (рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдирдпрд╛ рдЕрдЪреНрдЫрд╛ рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрдореВрд░реНрдд IMHO) рд╕реЗ рдЪрд┐рдкрдХреЗ рд░рд╣реЗрдВред рдиреЙрди рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдКрдкрд░ рдХреА рдкрд░рдд рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдпрд╣рд╛рдВ рджреЗрдЦрд╛ рдЧрдпрд╛ iv рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЖрджрд┐рдо рдХреЛ рдЗрддрдирд╛ рдЖрджрд┐рдо рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд▓реЛрдЧ рдЙрдирдХрд╛ рдЧрд▓рдд рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВрдЧреЗред рдПрдХ рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд╕рд╛рде рд╣рдо рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдо рдЖрдо рддреМрд░ рдкрд░ рдПрдИрдПрдбреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЬреАрд╕реАрдПрдо рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИред рддреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдорд╛рдорд▓рд╛ ( iv ) рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЛ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЗ ( nonce )ред

рджреВрд╕рд░реЗ, рдХреЗрд╡рд▓ byte[] iv рд╕реЗ GetNextNonce(Span<byte> writeNonceHere) рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧреИрд░-рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ? рдЖрдкрдиреЗ рд╕рдорд╕реНрдпрд╛ рдкрд░ рдХреЗрд╡рд▓ рдирд╛рдо/рд▓реЗрдмрд▓ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИред

рддреАрд╕рд░рд╛, рдЪреВрдВрдХрд┐ рд╣рдо iv рд╕реБрд░рдХреНрд╖рд╛ рдкрд░ рдиреАрддрд┐рдпреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпрд╛ рд╣рдореЗрдВ рдкреНрд░рдореБрдЦ рд╕реБрд░рдХреНрд╖рд╛ рдиреАрддрд┐рдпреЛрдВ рдореЗрдВ рднреА рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рдкреНрд░рдореБрдЦ рд╡рд┐рддрд░рдг рдиреАрддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рд╡реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рдЪрд┐рдВрддрд╛рдПрдВ рд╣реИрдВред

рдЕрдВрдд рдореЗрдВ, рдЙрдЪреНрдЪ рдкрд░рддреЛрдВ рдкрд░ рдЙрдкрдпреЛрдЧ рдкрд░ рдЧреИрд░ рдЕрддреНрдпрдВрдд рд╕реНрдерд┐рддрд┐рдЬрдиреНрдп рд╣реИред рдЖрдк рдПрдХ рднрдВрдЧреБрд░ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдХреНрд░реЙрд╕-рд▓реЗрдпрд░ рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рд╕рдЪ рдХрд╣реВрдВ рддреЛ рдЕрдЧрд░ рд╣рдо рдЖрджрд┐рдо рдХреЛ рдЫрд┐рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рдХреЛрдИ рдпрд╣ рдХрд╣рдиреЗ рдХрд╛ рдЗрд╢рд╛рд░рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рдХрд┐ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВ рдЙрд╕рдХреЗ рд▓рд┐рдП рдЬреЛрд░ рджреВрдВрдЧрд╛ред рд▓реЗрдХрд┐рди рд╣рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рд╡рд╣рд╛рдБ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЦрд░рд╛рдм рдХреНрд░рд┐рдкреНрдЯреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд▓реЛрдЧ "рдУрд╣ рдпрд╣ рдЙрдкрд▓рдмреНрдз рд╣реИ, рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдБрдЧрд╛"ред рд╣реЗрдХ рдПрдИрдПрд╕ рдХреЛ рд╣реА рджреЗрдЦреЗрдВ, рдореИрдВ рдмрд┐рдирд╛ рдПрдЪрдПрдордПрд╕реА рдХреЗ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реВрдВрдЧрд╛ред

рдореИрдВ рдПрдкреАрдЖрдИ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдФрд░ рдЕрдЧрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдереЛрдбрд╝рд╛ рдФрд░ рджрд░реНрдж рд╣реИ рддреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВред 99% рдбреЗрд╡рд▓рдкрд░реНрд╕ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдХреНрд░рд┐рдкреНрдЯреЛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡реЗ рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ 1% рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЖрд╕рд╛рди рдмрдирд╛рдирд╛ рдЬреЛ рдХрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рд╕реНрдкреИрди рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдЗрд╕ рдмрд╛рдд рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ - рдпрд╣ NetStandard2 рдореЗрдВ рдирд╣реАрдВ рд╣реИ

@sdrapkin рдЬреИрд╕рд╛ рдХрд┐ @Drawaes рдмрддрд╛рддрд╛ рд╣реИ Span<T> .NET рдорд╛рдирдХ 1.0 рд╣реИ рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдврд╛рдВрдЪреЗ рдкрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ ArraySegment<T> рд╕реЗ рднреА рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рд╕рдВрджрд░реНрднрд┐рдд рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рдВрдбреЛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рджреЗрддрд╛ рд╣реИ; рдкреВрд░реЗ рд╕рд░рдгреА рдХреЗ рдмрдЬрд╛рдпред

рд╕рд╛рде рд╣реА ReadOnlySpan<T> рдЙрд╕ рд╡рд┐рдВрдбреЛ рдореЗрдВ рд╕рдВрд╢реЛрдзрди рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ; рдлрд┐рд░ рд╕реЗ рд╕рд░рдгреА рдЦрдВрдб рдХреЗ рд╡рд┐рдкрд░реАрдд рдЬрд╣рд╛рдВ рдХреБрдЫ рднреА рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╡рд╣ рдкрд╛рд░рд┐рдд рд╕рд░рдгреА рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдФрд░/рдпрд╛ рдмрдирд╛рдП рд░рдЦ рд╕рдХрддрд╛ рд╣реИред

рд╕рд┐рдВрдХ рдПрдкрд┐рд╕ рдХреЗ рд▓рд┐рдП рд╕реНрдкреИрди рд╕рд╛рдорд╛рдиреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрдкреИрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдПрдкреАрдЖрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рд╕реНрдЯреИрдХрд▓реЙрдХ, рджреЗрд╢реА рдореЗрдореЛрд░реА рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ; рдЖрдЗрд╕рд┐рдВрдЧ рд╣реИ)

рдЕрд░реНрдерд╛рдд
ArraySegment рдХреЗ рд╕рд╛рде рдбреЙрдХреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдФрд░ рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░ рдкрдврд╝рдиреЗ/рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЛ рд░реЛрдХрд╛ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИ

void Encrypt(
    ArraySegment<byte> iv, // readonly; covered by authentication
    ArraySegment<byte> plaintext, // readonly; covered by authentication
    ref ArraySegment<byte> ciphertext, // must be of at least [plaintext_length + MaxTagSize] length. iv is not part of ciphertext.
    ArraySegment<byte> additionalData = default(ArraySegment<byte>) // readonly; optional; covered by authentication
    );

рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕реНрдкреИрди рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ рдПрдкреАрдЖрдИ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рд╕рд╛рде рд╣реА рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рд░реЛрдХрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ

void Encrypt(
    ReadOnlySpan<byte> iv, // covered by authentication
    ReadOnlySpan<byte> plaintext, // covered by authentication
    Span<byte> ciphertext, // must be of at least [plaintext_length + MaxTagSize] length. iv is not part of ciphertext.
    ReadOnlySpan<byte> additionalData = ReadOnlySpan<byte>.Empty) // optional; covered by authentication
    );

рдпрд╣ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд░рд╛рджреЗ рдХреЛ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдмрддрд╛рддрд╛ рд╣реИ; рдФрд░ рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░ рдкрдврд╝рдиреЗ/рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдХрдо рддреНрд░реБрдЯрд┐ рдкреНрд░рд╡рдг рд╣реИред

@benaadams @Drawaes рдиреЗ рдХрднреА рдирд╣реАрдВ рдХрд╣рд╛ рдХрд┐ Span<T> NetStandard ( рдХрд┐рд╕реА рднреА рд╢рд┐рдк рдХрд┐рдП рдЧрдП NetStandard ) рдореЗрдВ рдерд╛ред рдЙрд╕рдиреЗ рдЬреЛ рдХрд╣рд╛ рд╡рд╣ рд╣реИ (1) рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ Span<T> рдХрд┐рд╕реА рднреА рд╢рд┐рдк рдХрд┐рдП рдЧрдП рдиреЗрдЯрд╕реНрдЯреИрдВрдбрд░реНрдб рдореЗрдВ рдирд╣реАрдВ рд╣реИ; (2) рдХрд┐ Span<T> _"2.1 рд╕рдордп рд╕реАрдорд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╢рд┐рдкрд┐рдВрдЧ"_ рд╣реЛрдЧрд╛ред

рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдЬреАрдердм рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐, (рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП) Span<T> рдЪрд░реНрдЪрд╛ рдЕрднреА рдмрд╛рдЗрдХрд╢реЗрдбрд┐рдВрдЧ рд╣реИ - рдПрдкреАрдЖрдИ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рджрд╛рдпрд░реЗ рдпрд╛ рдЙрджреНрджреЗрд╢реНрдп рдкрд░ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯрддрд╛ рдирд╣реАрдВ рд╣реИред

рдпрд╛ рддреЛ рд╣рдо рдХрдЪреНрдЪреЗ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдЖрджрд┐рдо AEAD API рдХреЗ рд╕рд╛рде рдЬрд╛рддреЗ рд╣реИрдВ (рдЙрджрд╛ред CAESAR рдХреЗ рд╕рдорд╛рди):

  • рдкреЗрд╢реЗрд╡рд░реЛрдВ: рдПрдИрдПрд╕-рдЬреАрд╕реАрдПрдо/рд╕реАрд╕реАрдПрдо рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдлрд┐рдЯ, рдЕрдЪреНрдЫреЗ рд╕реНрд░реЛрддреЛрдВ (рдПрдирдЖрдИрдПрд╕рдЯреА, рдЖрд░рдПрдлрд╕реА) рд╕реЗ рдореМрдЬреВрджрд╛ рдкрд░реАрдХреНрд╖рдг рд╡реИрдХреНрдЯрд░ред @sidshetye рдЦреБрд╢ рд╣реЛрдВрдЧреЗред @blowdart _ "рдЖрджрд┐рдо рдХреЛ рдЗрддрдирд╛ рдЖрджрд┐рдо рдмрдирд╛рдиреЗ" рдкрд░ рдзреНрдпрд╛рди рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдВрддрддрдГ рдпрд┐рди рдФрд░ рдпрд╛рдВрдЧ рдХреЛ рджреЗрдЦреЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЖрджрд┐рдо рдЖрджрд┐рдо рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЪрд╛рдЗрд▓реНрдбрдкреНрд░реВрдл рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред
  • рд╡рд┐рдкрдХреНрд╖: рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ (рдХрд╣рд╛рд╡рдд 1%) рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдПрдкреАрдЖрдИ рдХрд╛ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬрдмрдХрд┐ рдЕрдиреНрдп рдЧреИрд░-рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ (99%) рдЯреВрдЯреЗ рд╣реБрдП .NET рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдХрд┐ .NET рдХреЗ рд╡рд┐рд╢рд╛рд▓ рдмрд╣реБрдордд рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛ред рд╕реАрд╡реАрдИ, рдЬреЛ рдЗрд╕ рдзрд╛рд░рдгрд╛ рдореЗрдВ рдмрд╣реБрдд рдпреЛрдЧрджрд╛рди рджреЗрдЧрд╛ рдХрд┐ .NET рдПрдХ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдордВрдЪ рд╣реИред

рдпрд╛ рд╣рдо рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рджреБрд░реБрдкрдпреЛрдЧ-рдЕрд╕рдВрднрд╡ рдпрд╛ рдкреНрд░рддрд┐рд░реЛрдзреА AEAD API рдХреЗ рд╕рд╛рде рдЬрд╛рддреЗ рд╣реИрдВ:

  • рдкреЗрд╢реЗрд╡рд░реЛрдВ: 99% рдЧреИрд░-рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЧрд▓рддрд┐рдпрд╛рдБ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо AEAD рдХреЛрдб рдореЗрдВ рдирд╣реАрдВред @blowdart рдХрд╛ _ "рдореИрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдПрдкреАрдЖрдИ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ" _ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдкреНрд░рддрд┐рдзреНрд╡рдирд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╕реБрд░рдХреНрд╖рд╛, рд╕рдореГрджреНрдзрд┐ рдФрд░ рдЕрдЪреНрдЫреЗ рдХрд░реНрдо рд╕рднреА рдкрд░ рдкрдбрд╝рддреЗ рд╣реИрдВред рдХрдИ рдЕрдЪреНрдЫреЗ рдПрдкреАрдЖрдИ рдбрд┐рдЬрд╛рдЗрди рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрд▓рдмреНрдз рд╣реИрдВред
  • рд╡рд┐рдкрдХреНрд╖: рдХреЛрдИ рдорд╛рдирдХ рдирд╣реАрдВред рдХреЛрдИ рдкрд░реАрдХреНрд╖рдг рд╡реИрдХреНрдЯрд░ рдирд╣реАрдВред рдЗрд╕ рдмрд╛рдд рдкрд░ рдХреЛрдИ рд╕рд╣рдорддрд┐ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ AEAD рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдСрдирд▓рд╛рдЗрди рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ API рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рд╣реА рд▓рдХреНрд╖реНрдп рд╣реИ (рд╕реНрдкреЙрдЗрд▓рд░: рдпрд╣ рдирд╣реАрдВ рд╣реИ - рд░реЛрдЧрд╡реЗ рдХрд╛ рдкреЗрдкрд░ рджреЗрдЦреЗрдВ)ред

рдпрд╛, рд╣рдо рджреЛрдиреЛрдВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╛ рд╣рдо рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрдХреНрд╖рд╛рдШрд╛рдд рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЕрднреА рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдореВрд▓ рднрд╛рд╖рд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ, рдХреНрд░рд┐рдкреНрдЯреЛ рдХреЛ рдПрдХ рдареЛрд╕, рдирд┐рдореНрди рд╕реНрддрд░ рдХреА рдореВрд▓рднреВрдд рдПрдкреАрдЖрдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдПрдХ рдмрд╛рд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдпрд╣ рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рдПрдкреАрдЖрдИ рдпрд╛ "рдЯреНрд░реЗрдирд┐рдВрдЧ рд╡реНрд╣реАрд▓реНрд╕" рдПрдкреАрдЖрдИ рдмрдирд╛рдиреЗ рд╕реЗ рдХреЛрд░ рдпрд╛ рд╕рдореБрджрд╛рдп рджреНрд╡рд╛рд░рд╛ рдЬрд▓реНрджреА рд╕реЗ рдмреНрд░рд┐рдЬ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдХрд┐рд╕реА рдХреЛ рднреА рдЪреБрдиреМрддреА рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрд▓реНрдЯрд╛ рд╢рд╛рди рд╕реЗ рдХрд░реЗрдВред рд╕рд╛рде рд╣реА рд╡рд┐рд╖рдп " рд╕рд┐рдлрд░ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдирд┐рдореНрди рд╕реНрддрд░ рдХрд╛ рдЖрджрд┐рдо " рд╣реИ!

@Drawaes рдХреНрдпрд╛ рдЗрд╕реЗ рдЕрднрд┐рд╕рд░рдг рдФрд░ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдордпрд░реЗрдЦрд╛ рд╣реИ? рдРрд╕реЗ GitHub рдЕрд▓рд░реНрдЯ рд╕реЗ рдкрд░реЗ рдЧреИрд░-Microsoft рд▓реЛрдЧреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдпреЛрдЬрдирд╛? 30 рдорд┐рдирдЯ рдХреА рдХреЙрдиреНрдлреНрд░реЗрдВрд╕ рдХреЙрд▓ рдХреА рддрд░рд╣? рдореИрдВ рдПрдХ рдЦрд░рдЧреЛрд╢ рдЫреЗрдж рд╕реЗ рдмрд╛рд╣рд░ рд░рд╣рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рд╣рдо рд╢рд░реНрдд рд▓рдЧрд╛ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ .NET рдХреЛрд░ рдХреНрд░рд┐рдкреНрдЯреЛ рдкрд░рд┐рдкрдХреНрд╡рддрд╛ рдФрд░ рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрддрд░ рдкрд░ рд╣реЛрдЧрд╛ .. рдЗрд╕рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреА рдЪрд░реНрдЪрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЯреНрд░рд╛рдЗрдПрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдо рдЕрднреА рднреА рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдордиреЗ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдмреЛрд░реНрдб (рд╢реЛрдзрдХрд░реНрддрд╛рдУрдВ рдФрд░ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдХрд╛ рд╕рдореВрд╣ рдЬреЛ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдХреЗ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ) рд╕реЗ рдореБрд▓рд╛рдХрд╛рдд рдХреА рд╣реИ рдФрд░ @bartonjs рдХреЗ рдкрд╛рд╕ рдЬрд▓реНрдж рд╣реА рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрдЧреАред

рдереЛрдбрд╝рд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдбреВрдбрд▓рд┐рдВрдЧ рдФрд░ рдХреНрд░рд┐рдкреНрдЯреЛ рдмреЛрд░реНрдб рдХреА рд╕рд▓рд╛рд╣ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рд╛рде рдЖрдПред рд╣рдорд╛рд░рд╛ рдореЙрдбрд▓ GCM, CCM, SIV рдФрд░ CBC+HMAC рдерд╛ (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рдЕрднреА SIV рдпрд╛ CBC+HMAC рдХрд░рдиреЗ рдХреА рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдмрд╕ рд╣рдо рдЖрдХрд╛рд░ рдХреЛ рд╕рд╛рдмрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ)ред

```рд╕реА#
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ INonceProvider
{
рд░реАрдб рдУрдирд▓реАрд╕реНрдкреИрдирдЧреЗрдЯрдиреЗрдХреНрд╕реНрдЯрдиреЛрдиреНрд╕ (рдЗрдВрдЯ рдиреЙрдирд╕рд╛рдЗрдЬрд╝);
}

рдкрдмреНрд▓рд┐рдХ рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрдЯ рдХреНрд▓рд╛рд╕ рдСрдереЗрдВрдЯрд┐рдХреЗрдЯреЗрдбрдПрдиреНрдХреНрд░рд┐рдкреНрдЯрд░: IDISposable
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ int NonceOrIVSizeInBits {рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ; }
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ int TagSizeInBits {рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ; }
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдмреВрд▓ рдПрд╕реЛрд╕рд┐рдПрдЯреЗрдбрдбреЗрдЯрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ {рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ; }
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкреИрдиLastNonceOrIV {рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ; }
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкреИрдирд▓рд╛рд╕реНрдЯрдЯреИрдЧ {рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ; }

protected AuthenticatedEncryptor(
    int tagSizeInBits,
    bool supportsAssociatedData,
    int nonceOrIVSizeInBits) => throw null;

protected abstract bool TryEncrypt(
    ReadOnlySpan<byte> data,
    ReadOnlySpan<byte> associatedData,
    Span<byte> encryptedData,
    out int bytesWritten,
    Span<byte> tag,
    Span<byte> nonceOrIVUsed);

public abstract void GetEncryptedSizeRange(
    int dataLength,
    out int minEncryptedLength,
    out int maxEncryptedLength);

public bool TryEncrypt(
    ReadOnlySpan<byte> data,
    ReadOnlySpan<byte> associatedData,
    Span<byte> encryptedData,
    out int bytesWritten) => throw null;

public byte[] Encrypt(
    ReadOnlySpan<byte> data,
    ReadOnlySpan<byte> associatedData) => throw null;

// some variant of the Dispose pattern here.

}

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдореБрд╣рд░рдмрдВрдж рд╡рд░реНрдЧ AesGcmEncryptor : AuthenticatedEncryptor
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ AesGcmEncryptor(ReadOnlySpankeySize, INonceProvider рдЧреИрд░-рдкреНрд░рджрд╛рддрд╛)
: рдЖрдзрд╛рд░(128, рд╕рдЪ, 96)
{
}
}

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдореБрд╣рд░рдмрдВрдж рд╡рд░реНрдЧ AesCcmEncryptor : AuthenticatedEncryptor
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ AesCcmEncryptor(
рд░реАрдб рдУрдирд▓реАрд╕реНрдкреИрдирдЪрд╛рднреА,
рдЗрдВрдЯ рдиреЙрдирд╕рд╛рдЗрдЬрдЗрдирдмрд┐рдЯреНрд╕,
INonceProvider рдЧреИрд░-рдкреНрд░рджрд╛рддрд╛,
рдЗрдВрдЯ рдЯреИрдЧрд╕рд╛рдЗрдЬрдЗрдирдмрд┐рдЯреНрд╕)
: рдЖрдзрд╛рд░ (tagSizeInBits, рд╕рдЪ, nonceSizeInBits)
{
рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд▓реНрдкрдирд╛ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЧреИрд░-рдЖрдХрд╛рд░ рдФрд░ рдЯреИрдЧ рдЖрдХрд╛рд░ рдХреЛ рдорд╛рдиреНрдп рдХрд░реЗрдВ;
}
}

рдкрдмреНрд▓рд┐рдХ рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрдЯ рдХреНрд▓рд╛рд╕ рдСрдереЗрдВрдЯрд┐рдХреЗрдЯреЗрдб рдбрд┐рдХреНрд░рд┐рдкреНрдЯрд░: IDISposable
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рд╛рд░ рдмреВрд▓ рдЯреНрд░рд╛рдИрдбрд┐рдХреНрд░рд┐рдкреНрдЯ (
рд░реАрдб рдУрдирд▓реАрд╕реНрдкреИрдирдЙрдкрдирд╛рдо,
рд░реАрдб рдУрдирд▓реАрд╕реНрдкреИрдирдЧреИрд░-рдУрдЖрд░рдЖрдИрд╡реА,
рд░реАрдб рдУрдирд▓реАрд╕реНрдкреИрдирдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдбреЗрдЯрд╛,
рд░реАрдб рдУрдирд▓реАрд╕реНрдкреИрдирд╕рдВрдмрджреНрдз рдбреЗрдЯрд╛,
рдЕрд╡рдзрд┐рдЖрдВрдХрдбрд╝реЗ,
рдЖрдЙрдЯ рдЗрдВрдЯ рдмрд╛рдЗрдЯреНрд╕ рд░рд╛рдЗрдЯ);

public abstract void GetEncryptedSizeRange(
    int encryptedDataLength,
    out int minDecryptedLength,
    out int maxDecryptedLength);

public byte[] Decrypt(
    ReadOnlySpan<byte> tag,
    ReadOnlySpan<byte> nonceOrIV,
    ReadOnlySpan<byte> encryptedData,
    ReadOnlySpan<byte> associatedData) => throw null;

// some variant of the Dispose pattern here.

}

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдореБрд╣рд░рдмрдВрдж рд╡рд░реНрдЧ AesGcmDecryptor : AuthenticatedDecryptor
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ AesGcmDecryptor(ReadOnlySpanрдХреБрдВрдЬреА) => рдЕрд╢рдХреНрдд рдлреЗрдВрдХ;
}

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдореБрд╣рд░рдмрдВрдж рд╡рд░реНрдЧ AesCcmDecryptor : AuthenticatedDecryptor
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ AesCcmDecryptor(ReadOnlySpanрдХреБрдВрдЬреА) => рдЕрд╢рдХреНрдд рдлреЗрдВрдХ;
}
```

рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛рдкрди рдирд╣реАрдВ рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ (рдирд┐рдореНрди) рд╕рдВрдмрджреНрдз рдЬреЛрдЦрд┐рдореЛрдВ (рдЬреАрд╕реАрдПрдо рдХреЗ рд▓рд┐рдП рдЕрддреНрдпрдзрд┐рдХ рдЙрдЪреНрдЪ) рдпрд╛ рдЗрд╕рдХреА рдЕрд╕рдВрднрд╡рддрд╛ (рд╕реАрд╕реАрдПрдо) рдХреЗ рд╕рд╛рде рд╕рдВрдпреБрдХреНрдд рд╣реЛрдиреЗ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИред

рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд▓рд┐рдП рдЧреИрд░ рдХреЗ рдмрд╛рд╣рд░реА рд╕реНрд░реЛрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдХреЛрдИ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдкреНрд░рддреНрдпреЗрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди/рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд╕рдВрджрд░реНрдн рдХреА рдХреБрдВрдЬреА рдХреЛ рд╕реНрд╡рдпрдВ рдмрд╛рдВрдзрдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд╡рд╣ рдЪреАрдЬреЛрдВ рдХреЛ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЦрд┐рд▓рд╛ рд╕рдХреЗред рдЬрдмрдХрд┐ TryEncrypt рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ GetNextNonce рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдХреЙрд▓ рдХрд░реЗрдЧрд╛, рдЗрд╕ рдмрд╛рдд рдХреА рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд╣ рд╡рд┐рд╢реЗрд╖ TryEncrypt рд╕рдлрд▓ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрднреА рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЧреИрд░-рдкреБрди: рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕реАрдмреАрд╕реА+рдПрдЪрдПрдордПрд╕реА рдХреЗ рд▓рд┐рдП рд╣рдо рд╢рдмреНрджрд╛рд╡рд▓реА рдореЗрдВ рдЧрдбрд╝рдмрдбрд╝реА рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдЗрдВрдЯрд░рдлреЗрд╕, рдЖрдИрдЖрдИрд╡реАрдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдмрдирд╛рдПрдВрдЧреЗред SIV рдХреЗ рд▓рд┐рдП IV рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реИ; рдФрд░ рдХрд▓реНрдкрдирд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЧреИрд░ (рдЬрдм рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХреЛ рдХреЗрд╡рд▓ рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рддреЛ SIV, рдХрдо рд╕реЗ рдХрдо, рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ рдХрд┐ TryEncrypt рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ nonceOrIV рдХрд╛ рд╣реЛрдирд╛ рдЖрдо рддреМрд░ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

TryDecrypt рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдорд╛рдиреНрдп рдЯреИрдЧ рдкрд░ рдлреЗрдВрдХрддрд╛ рд╣реИред рдпрджрд┐ рдЧрдВрддрд╡реНрдп рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИ (рдХреЛрд╢рд┐рд╢ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░) рдпрд╣ рдХреЗрд╡рд▓ рдЭреВрдареА рд╡рд╛рдкрд╕реА рдХрд░рддрд╛ рд╣реИ

рдЪреАрдЬреЗрдВ рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЦреБрд▓реА рд╣реИрдВ:

  • рдХреНрдпрд╛ рдЖрдХрд╛рд░ рдмрд┐рдЯреНрд╕ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЬреИрд╕реЗ рдЪрд╢реНрдореЗ рдХреЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕реЗ) рдпрд╛ рдмрд╛рдЗрдЯреНрд╕ (рдЪреВрдВрдХрд┐ рдХреЗрд╡рд▓% 8 рдорд╛рди рд╡реИрд╕реЗ рднреА рдХрд╛рдиреВрдиреА рд╣реИрдВ, рдФрд░ рд╣рдо рд╣рдореЗрд╢рд╛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЪрд╢реНрдореЗ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЗ рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдЧреИрд░ рдЖрдХрд╛рд░ рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ )?
  • рдкреИрд░рд╛рдореАрдЯрд░ рдирд╛рдо рдФрд░ рдЖрджреЗрд╢ред
  • LastTag/LastNonceOrIV рдЧреБрдгред (рдЙрдиреНрд╣реЗрдВ (рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп) рдмрдирд╛рдирд╛ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ TryEncrypt рдкрд░ рдлреИрд▓рд╛ рд╣реБрдЖ рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рддреАрди рдмрдлрд╝рд░реНрд╕ рд╣реИрдВ рдЬреЛ рдмрд╣реБрдд рдЫреЛрдЯреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдХрд┐рдирд╛рд░реЗ рдкрд░ рдмреИрдардиреЗ рд╕реЗ "рдХреЛрд╢рд┐рд╢" рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реИ; рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рд╡рд╛рджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣реЛрдЧрд╛ рдХрднреА рднреА рдмрд╣реБрдд рдЫреЛрдЯрд╛ рдмрдлрд░ рди рджреЗрдВред)
  • рдПрдХ рдПрдИ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкреЗрд╢ рдХрд░рдирд╛ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
  • рдХреНрдпрд╛ associatedData рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ ReadOnlySpan<byte>.Empty рдХреЗ рд╕рд╛рде рдЕрдВрдд рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?

    • рдпрд╛ рдУрд╡рд░рд▓реЛрдб рдиреЗ рдЗрд╕реЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛?

  • рдХреНрдпрд╛ рдХреЛрдИ byte[] -рд░рд┐рдЯрд░реНрдирд┐рдВрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрдпрд╛рд░, рдпрд╛ рдирдлрд░рдд рдХрд╛ рджрд╛рд╡рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ? (рд╕реНрдкреИрди рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдо рдЖрд╡рдВрдЯрди рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рд╣реИ)
  • рдЖрдХрд╛рд░ рд╕реАрдорд╛ рд╡рд┐рдзрд┐рдпрд╛рдБ рдЕрдВрдд рдореЗрдВ рдмреЛрд▓реНрдЯ рдХреА рддрд░рд╣ рдереАрдВред

    • рдЙрдирдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╣реИ рдХрд┐

    • рдпрджрд┐ рдЧрдВрддрд╡реНрдп рдЕрд╡рдзрд┐ рдиреНрдпреВрдирддрдо рд╕реЗ рдХрдо рд╣реИ, рддреЛ рддреБрд░рдВрдд рдЭреВрдареА рд╡рд╛рдкрд╕реА рдХрд░реЗрдВред

    • byte[] -рд░рд┐рдЯрд░реНрдирд┐рдВрдЧ рд╡рд┐рдзрд┐рдпрд╛рдВ рдЕрдзрд┐рдХрддрдо рдХрд╛ рдмрдлрд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд░реЗрдВрдЧреА, рдФрд░ рдлрд┐рд░ рдРрд░реЗред рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдЗрд╕реЗ рдЖрдХрд╛рд░ рджреЗрдВред

    • рд╣рд╛рдБ, GCM рдФрд░ CCM рдХреЗ рд▓рд┐рдП min=max=input.Length , рд▓реЗрдХрд┐рди рдпрд╣ CBC+HMAC рдпрд╛ SIV рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдирд╣реАрдВ рд╣реИ

    • рдХреНрдпрд╛ рдХреЛрдИ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╣реИ рдЬрд┐рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рд▓рдВрдмрд╛рдИ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛?

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрд╛рдЗрдЯреНрд╕ - рдмрд┐рдЯреНрд╕ рдирд╣реАрдВред
рдЧреИрд░-рдкреНрд░рджрд╛рддрд╛ рдЬреЛ рдХреА-рдЕрд╡реЗрдпрд░ рдирд╣реАрдВ рд╣реИ, рдПрдХ рдмрдбрд╝реА рдЧрд▓рддреА рд╣реИред

рдЧреИрд░-рдкреНрд░рджрд╛рддрд╛ рдЬреЛ рдХреА-рдЕрд╡реЗрдпрд░ рдирд╣реАрдВ рд╣реИ, рдПрдХ рдмрдбрд╝реА рдЧрд▓рддреА рд╣реИред

рдЖрдк рдЕрдкрдиреЗ рдЧреИрд░-рдкреНрд░рджрд╛рддрд╛ рдХреЛ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдХреЛрдИ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдирд┐рдпрддрд╛рддреНрдордХ рд╕рдлрд╛рдИ/ IDisposable рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

рдирд┐рдпрддрд╛рддреНрдордХ рд╕рдлрд╛рдИ/рдЖрдИрдбреАрд╕реНрдкреЛрдЬреЗрдмрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

рдЕрдЪреНрдЫрд╛ рдирд┐рд░реНрдгрдпред рдЗрд╕реЗ AuthenticatedEncryptor/AuthenticatedDecryptor рдореЗрдВ рдЬреЛрдбрд╝рд╛ред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдиреЙрди рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдкрд░ рдбрд┐рд╕реНрдкреЛрдЬрд╝реЗрдмрд┐рд▓рд┐рдЯреА рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдХреЙрд▓рд░ рд╕рд┐рд░реНрдл рдпреВрдЬрд┐рдВрдЧ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯреНрд╕ рдХреЛ рд╕реНрдЯреИрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

INonceProvider рдЕрд╡рдзрд╛рд░рдгрд╛/рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдореБрдЭреЗ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ (рджреВрд╕рд░реЛрдВ рдХреЛ рдкреНрд░рддрд┐рдзреНрд╡рдирд┐рдд рдХрд░рдирд╛)ред рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡ рдХреЛ рдЖрджрд┐рдо рд╣реЛрдиреЗ рджреЗрдВ - рдиреЙрди рдореЗрдВ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдкрд╛рд╕ рдХрд░реЗрдВ рдЬреИрд╕реЗ рдЖрдк рдХреБрдВрдЬреА рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ (рдпрд╛рдиреА рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ - рд╣рд╛рд▓рд╛рдВрдХрд┐ рдШреЛрд╖рд┐рдд)ред рдХреЛрдИ рдПрдИ/рдПрдИрдПрдбреА рд╕реНрдкреЗрдХ рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдЧреИрд░ рдЙрддреНрдкрдиреНрди/рд╡реНрдпреБрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ - рдпрд╣ рдПрдХ рдЙрдЪреНрдЪ-рдкрд░рдд рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╣реИ (рдХрдо рд╕реЗ рдХрдо рд▓реЗрдЯ-рдкреНрд░рд╛рдЗрдорд┐рдЯрд┐рд╡-рдмреА-рдЖрджрд┐рдо рдореЙрдбрд▓ рдореЗрдВ)ред

рдХреЛрдИ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдирд╣реАрдВ? рд╕рдЪ рдореЗрдВ? рдореВрд▓ рдЖрдзрд╛рд░рднреВрдд рд╕реНрддрд░ рдкрд░ рдПрдИрдПрд╕-рдЬреАрд╕реАрдПрдо рдЬреИрд╕реЗ рд╕реНрдЯреНрд░реАрдо рд╕рд┐рдлрд░ рд╕реЗ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЛ рдЬрдмрд░рди рд╣рдЯрд╛рдиреЗ рдХрд╛ рдХреНрдпрд╛ рдФрдЪрд┐рддреНрдп рд╣реИ?

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХрд╛ рдХреНрд░рд┐рдкреНрдЯреЛ рдмреЛрд░реНрдб рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рд╕рдореАрдХреНрд╖рд╛ рдХреА рдЧрдИ рдЗрди рджреЛ рд╣рд╛рд▓рд┐рдпрд╛ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреА рдХреНрдпрд╛ рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддрд╛ рд╣реИ?

  1. рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдкрд╛рд╕ 10-30GB рдХреЗ рдмреАрдЪ рдмрдбрд╝реА рд╕реНрд╡рд╛рд╕реНрдереНрдп рд╕рдВрдмрдВрдзреА рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣реИрдВред рдХреЛрд░ рдХреЗрд╡рд▓ рджреЛ рдорд╢реАрдиреЛрдВ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рджреЗрдЦрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рдкрд╛рд╕ рд╕реНрдЯреНрд░реАрдо рд╣реИред рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ 10GB рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рдХреБрдВрдЬреА рдЬрд╛рд░реА рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдиреЗ рдРрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ рдмреЗрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдЕрдм рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо a) рдЙрд╕ рдбреЗрдЯрд╛ рдХреЛ рдмрдлрд░ рдХрд░реЗрдВ (рдореЗрдореЛрд░реА, рдХреЛрдИ рдкрд╛рдЗрдк-рд▓рд╛рдЗрдирд┐рдВрдЧ рдирд╣реАрдВ) b) рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди (рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рд╕рднреА рдорд╢реАрдиреЗрдВ рдЕрдм рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реИрдВ!) рдХрд┐рдпрд╛ рд╣реБрдЖ) ? рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдЖрдк рдордЬрд╛рдХ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЖрдк рд▓реЛрдЧ рдЬрд╛рдирдмреВрдЭрдХрд░ "рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрдХ рдмреЛрдЭ рд╣реИ" рдЦреЗрд▓ рдореЗрдВ рд╡рд╛рдкрд╕ рдбрд╛рд▓ рд░рд╣реЗ рд╣реИрдВред

  2. рднреМрддрд┐рдХ рд╕реБрд░рдХреНрд╖рд╛ рдЗрдХрд╛рдИ рдореЗрдВ рдХрдИ 4K рдзрд╛рд░рд╛рдПрдБ рд╣реЛрддреА рд╣реИрдВ рдЬреЛ рдЖрд░рд╛рдо рд╕реЗ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдЬрд╛рддреА рд╣реИрдВред рдлреНрд░реЗрд╢ рдХреА рдЗрд╢реНрдпреВ 15GB рдХреА рд╕реАрдорд╛ рдкрд░ рд╣реЛрддрд╛ рд╣реИред рдЖрдк рдкреВрд░реА рдХреНрд▓рд┐рдк рдХреЛ рдмрдлрд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд░рдЦрддреЗ рд╣реИрдВ?

рдореБрдЭреЗ рд╕рдореБрджрд╛рдп рд╕реЗ рдХреЛрдИ рдЗрдирдкреБрдЯ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ-рд╡рд┐рд╢реНрд╡ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧ, рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╕рдорд░реНрдерди рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд░рд╣реЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЯреАрдо рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рд╕рдВрд╡рд╛рдж рд╕реЗ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЙрд▓рдЭ рдЬрд╛рддреА рд╣реИ рдФрд░ рдлрд┐рд░ рдХрд┐рд╕реА рдиреЗ рдХреБрдЫ рдирд╣реАрдВ рдорд╛рдВрдЧрд╛ рд╣реИ, рдХреБрдЫ рдРрд╕рд╛ рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдорд╛рд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ "рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдзреАрдорд╛ рдФрд░ рдорд╣рдВрдЧрд╛ рд╣реИ, рдЗрд╕реЗ рдЫреЛрдбрд╝ рджреЗрдВ?"

рдЖрдк Encrypt рдФрд░ EncryptFinal рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдкреВрд░реЗ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдирд┐рд░реНрдгрдп рдереЛрдкрдиреЗ рдХреЗ рдмрдЬрд╛рдп рджреЛрдиреЛрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдЧрд╛ред

рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдбрд┐рдЬрд╛рдЗрди рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рдирд╣реАрдВред

рдореВрд▓ рдЖрдзрд╛рд░рднреВрдд рд╕реНрддрд░ рдкрд░ рдПрдИрдПрд╕-рдЬреАрд╕реАрдПрдо рдЬреИрд╕реЗ рд╕реНрдЯреНрд░реАрдо рд╕рд┐рдлрд░ рд╕реЗ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЛ рдЬрдмрд░рди рд╣рдЯрд╛рдиреЗ рдХрд╛ рдХреНрдпрд╛ рдФрдЪрд┐рддреНрдп рд╣реИ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рдерд╛

рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛рдкрди рдирд╣реАрдВ рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ (рдирд┐рдореНрди) рд╕рдВрдмрджреНрдз рдЬреЛрдЦрд┐рдореЛрдВ (рдЬреАрд╕реАрдПрдо рдХреЗ рд▓рд┐рдП рдЕрддреНрдпрдзрд┐рдХ рдЙрдЪреНрдЪ) рдпрд╛ рдЗрд╕рдХреА рдЕрд╕рдВрднрд╡рддрд╛ (рд╕реАрд╕реАрдПрдо) рдХреЗ рд╕рд╛рде рд╕рдВрдпреБрдХреНрдд рд╣реЛрдиреЗ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИред

GCM рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрдлрд╝ рдХреНрд╖рдг рд╣реЛрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рдпрд╣ рдХреБрдВрдЬреА рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдХреЛрдИ рд╣рдорд▓рд╛рд╡рд░ рдЪрдпрдирд┐рдд рд╕рд┐рдлрд░рдЯреЗрдХреНрд╕реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЯреИрдЧ рд╕рддреНрдпрд╛рдкрди рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рд╡реЗ рдХреБрдВрдЬреА рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред (рдпрд╛ рддреЛ рдПрдХ рдХреНрд░рд┐рдкреНрдЯреЛрдХрд░рдВрд╕реА рдореБрдЭреЗ рдмрддрд╛рддрд╛ рд╣реИ)ред рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ, рдпрджрд┐ рдХреЛрдИ GCM-рд╕рдВрд╕рд╛рдзрд┐рдд рдбреЗрдЯрд╛ рдЯреИрдЧ рд╕рддреНрдпрд╛рдкрди рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рд╕реА рднреА рдмрд┐рдВрджреБ рдкрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддреЛ рдХреБрдВрдЬреА рд╕реЗ рдЫреЗрдбрд╝рдЫрд╛рдбрд╝ рдХреА рдЬрд╛рддреА рд╣реИред

рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдХреНрд░рд┐рдкреНрдЯреЛ рдмреЛрд░реНрдб рдкрд╣рд▓реЗ рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЬреАрд╕реАрдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░реЗрдЧрд╛, рдмрд▓реНрдХрд┐ рд╕реАрдмреАрд╕реА + рдПрдЪрдПрдордПрд╕реАред

рдпрджрд┐ рдЖрдкрдХрд╛ рджреВрд╕рд░рд╛ рдкрд░рд┐рджреГрд╢реНрдп 4k рдлрд╝реНрд░реЗрдорд┐рдВрдЧ рд╣реИ, рдФрд░ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ 4k рдлрд╝реНрд░реЗрдо рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЗрд╕ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ 4k + рдЧреИрд░ + рдЯреИрдЧ рдлреНрд░реЗрдо рдмрд╛рдЗрдЯ рд╡рд╛рдкрд╕ рдкрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдХрднреА рднреА рдХреАрд╕реНрдЯреНрд░реАрдо/рдХреБрдВрдЬреА рдХреЛ рд▓реАрдХ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП: рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ "рдЖрджрд┐рдо рдХреЛ рдЖрджрд┐рдо рд╣реЛрдиреЗ рджреЗрдВ" рдХреНрд░рд┐рдкреНрдЯреЛ рдПрдкреАрдЖрдИред рдпрд╣рд╛рдБ рдкреНрд░рдорд╛рдгрд┐рдд рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд▓рд┐рдП рдореЗрд░реА рдХрдХреНрд╖рд╛ рд╣реИред

рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдХреБрдВрдЬреА рдХреЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдПрдХ рдХреНрд░рд┐рдкреНрдЯреЛ рдЖрджрд┐рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╕рд╛рдмрд┐рдд рд╣реБрдЖред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдХреНрд╕рд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрджрд┐рдо рдХреЛ рдЙрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ рдкреНрд▓рдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдХрд┐рд╕реА рднреА рдПрдИрдПрдбреА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ рдЪрд╛рдмрд┐рдпреЛрдВ рдЖрджрд┐ рдХреА рдкреАрдврд╝реА рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╡рд╣рд╛рдБ рдПрдХ AeadAlgorithm рд╡рд░реНрдЧ рдФрд░ рдПрдХ рдЕрд▓рдЧ рдХреБрдВрдЬреА рд╡рд░реНрдЧ рд╣реИред

рдПрдХ рдФрд░ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдЪреАрдЬ рдЬрд┐рд╕рдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ рдмрдЧреЛрдВ рдХреЛ рд░реЛрдХрд╛ рд╣реИ, рд╡рд╣ рд╣реИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдХреБрдВрдЬреА рдФрд░ рдПрдХ рдЧреИрд░ , рд╣рд░ рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рджреЗ byte[] рдпрд╛ Span<byte> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдпред


AeadAlgorithm API (рд╡рд┐рд╕реНрддреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ)

public abstract class AeadAlgorithm : Algorithm
{
    public int KeySize { get; }

    public int NonceSize { get; }

    public int TagSize { get; }

    public byte[] Decrypt(
        Key key,
        Nonce nonce,
        ReadOnlySpan<byte> associatedData,
        ReadOnlySpan<byte> ciphertext)

    public void Decrypt(
        Key key,
        Nonce nonce,
        ReadOnlySpan<byte> associatedData,
        ReadOnlySpan<byte> ciphertext,
        Span<byte> plaintext)

    public byte[] Encrypt(
        Key key,
        Nonce nonce,
        ReadOnlySpan<byte> associatedData,
        ReadOnlySpan<byte> plaintext)

    public void Encrypt(
        Key key,
        Nonce nonce,
        ReadOnlySpan<byte> associatedData,
        ReadOnlySpan<byte> plaintext,
        Span<byte> ciphertext)

    public bool TryDecrypt(
        Key key,
        Nonce nonce,
        ReadOnlySpan<byte> associatedData,
        ReadOnlySpan<byte> ciphertext,
        out byte[] plaintext)

    public bool TryDecrypt(
        Key key,
        Nonce nonce,
        ReadOnlySpan<byte> associatedData,
        ReadOnlySpan<byte> ciphertext,
        Span<byte> plaintext)
}

@bartonjs рд╡рд╣ рд╕рд╣реА рд╣реИ/рдЖрдкрдХреЛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рддрдХ рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рддреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рдпрд╛ рдЕрднреА рддрдХ рдирд╣реАрдВ) рддреЛ рдЖрдк рдмреНрд▓реЙрдХ рдХреЗ рдЗрдирдкреБрдЯ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣рд╛рдВ рд╕реЗ рдкреАрдЫреЗ рдХреА рдУрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ...

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдордзреНрдп рд╣рдорд▓реЗ рдореЗрдВ рдПрдХ рдЖрджрдореА рдЬреНрдЮрд╛рдд рдмреНрд▓реЙрдХ рдХреЛ рд╕реАрдмреАрд╕реА рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреНрд▓рд╛рд╕рд┐рдХ рдмрд┐рдЯ рдлрд╝реНрд▓рд┐рдкрд┐рдВрдЧ рд╣рдорд▓рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрдбрд╝реЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд╕реАрд░рд┐рдпрд▓ рдиреЙрди рдпрд╛ рдЗрд╕реА рддрд░рд╣ рдХреЗ рд╕рд╛рде рдЪрдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж ... рдЕрд▓рд╛ рдЯреАрдПрд▓рдПрд╕ред

рдареАрдХ рд╣реИ, рдореБрдЭреЗ рдлрд┐рд░ рд╕реЗ рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдореИрдВ рдХрд░рддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдЫреЛрдЯреЗ рдЖрдХрд╛рд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред

рдЦреБрд▓реЗрдкрди рдХреА рднрд╛рд╡рдирд╛ рдореЗрдВ, рдХреНрдпрд╛ рдпрд╣ рдкреНрд░рдХрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рд░рд┐рд╡реНрдпреВ рдмреЛрд░реНрдб рдореЗрдВ рдХреМрди рд╣реИ (рдФрд░ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдЗрд╕ рд╡рд┐рд╖рдп рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рджрд╕реНрдпреЛрдВ рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ/рд░рд╛рдп)? рдмреНрд░рд╛рдпрди рд▓рд╛рдореИрдЪрд┐рдпрд╛ рдФрд░ рдХреМрди?

_рд╡рд┐рдкрд░реАрдд рдордиреЛрд╡рд┐рдЬреНрдЮрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:_

рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ AEAD рдХреА рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдИ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдФрд╕рдд рдЬреЛ рдХреЗ рд▓рд┐рдП рдЗрдиреНрдлрд░реНрдиреЛ рдПрдХрдорд╛рддреНрд░ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ CryptoStream -рдЖрдзрд╛рд░рд┐рдд рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ AEAD рд╣реИред рдзрдиреНрдпрд╡рд╛рдж рдПрдордПрд╕ рдХреНрд░рд┐рдкреНрдЯреЛ рд╕рдореАрдХреНрд╖рд╛ рдмреЛрд░реНрдб!

@ektrah рдХреА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЙрдирдХрд╛ (рдЙрд╕рдХрд╛?) рджреГрд╖реНрдЯрд┐рдХреЛрдг RFC 5116 рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИред RFC 5116 рдореЗрдВ рдХрдИ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдЙрджреНрдзрд░рдг рд╣реИрдВ:

3.1. рдЧреИрд░ рдкреАрдврд╝реА рдкрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ
рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЧреИрд░реЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬреЛ рдЗрд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреБрдВрдЬреА рдХреЗ рдХрд┐рд╕реА рднреА рдирд┐рд╢реНрдЪрд┐рдд рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП рдкреНрд░рдорд╛рдгрд┐рдд рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдСрдкрд░реЗрд╢рди рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЖрд╣реНрд╡рд╛рди рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдЧреИрд░-рдореВрд▓реНрдп рдЕрд▓рдЧ рд╣реЛред
...

  1. AEAD рдПрд▓реНрдЧреЛрд░рд┐рдердо рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдкрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ
    рдкреНрд░рддреНрдпреЗрдХ AEAD рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ N_MIN рдФрд░ N_MAX рдСрдХреНрдЯреЗрдЯ рдХреЗ рдмреАрдЪ рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рдЧреИрд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ N_MIN рдФрд░ N_MAX рдХреЗ рдорд╛рди рдЙрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдВред N_MAX рдФрд░ N_MIN MAY рдХреЗ рдорд╛рди рдмрд░рд╛рдмрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдмрд╛рд░рд╣ (12) рдСрдХреНрдЯреЗрдЯ рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рд╛рде рдПрдХ рдЧреИрд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд░реИрдВрдбрдорд╛рдЗрдЬреНрдб рдпрд╛ рд╕реНрдЯреЗрдЯрдлреБрд▓ рдПрд▓реНрдЧреЛрд░рд┐рджрдо, рдЬрд┐рдирдХрд╛ рд╡рд░реНрдгрди рдиреАрдЪреЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореЗрдВ N_MAX рдХрд╛ рдорд╛рди рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
    ...
    рдПрдХ рдкреНрд░рдорд╛рдгрд┐рдд рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕реНрд░реЛрдд рдХреЛ рд╢рд╛рдорд┐рд▓ рдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЖрдВрддрд░рд┐рдХ рдЖрд░рдВрднреАрдХрд░рдг рд╡реЗрдХреНрдЯрд░ рдХреА рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕реЗ рд╕рд┐рдлрд░рдЯреЗрдХреНрд╕реНрдЯ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ AEAD рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ; рд╣рд╛рд▓рд╛рдВрдХрд┐ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреЗрд╡рд▓ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╣реИ, рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рд╣рдореЗрд╢рд╛ рдирд┐рдпрддрд╛рддреНрдордХ рд╣реЛрддрд╛ рд╣реИред рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ N_MAX рдХрд╛ рдорд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╢реВрдиреНрдп рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред

рдПрдХ рдкреНрд░рдорд╛рдгрд┐рдд рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдСрдкрд░реЗрд╢рди рдХреЗ рдЖрд╣реНрд╡рд╛рди рдХреЗ рдмреАрдЪ рдмрдирд╛рдП рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рджреНрд╡рд╛рд░рд╛ рдЖрдВрддрд░рд┐рдХ рдЧреИрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ AEAD рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЛ рд╕реНрдЯреЗрдЯрдлреБрд▓ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рджреНрд╡рд╛рд░рд╛ рдЕрдЪреНрдЫреА рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддрдм рднреА рдЬрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢реВрдиреНрдп-рд▓рдВрдмрд╛рдИ рд╡рд╛рд▓реЗ рдЧреИрд░-рдЗрдирдкреБрдЯ рдХрд░рддрд╛ рд╣реИред рдПрдХ рд╕реНрдЯреЗрдЯрдлреБрд▓ рдПрд▓реНрдЧреЛрд░рд┐рдердо MAY рдХрд╛ рдорд╛рди N_MAX рд╣реИ рдЬреЛ рд╢реВрдиреНрдп рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред

рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рддрд▓рд╛рд╢рдиреЗ рд▓рд╛рдпрдХ рдПрдХ рд╡рд┐рдЪрд╛рд░ рд╢реВрдиреНрдп-рд▓рдВрдмрд╛рдИ/рд╢реВрдиреНрдп рдиреЙрди рдХрд╛ рдЧреБрдЬрд░рдирд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ "рд╡рд┐рд╢реЗрд╖" рдЧреИрд░ рдореВрд▓реНрдп рдХреЗ рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧреИрд░ рдореВрд▓реНрдп рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдПрдирдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред

рдпрджрд┐ INonceProvider "рдХрд╛рд░рдг" рдХреЗ рдХрд╛рд░рдг рд░рд╣рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдЕрдиреНрдп рд╡рд┐рдЪрд╛рд░ Reset() рдХреЙрд▓ рдЬреЛрдбрд╝рдирд╛ рд╣реИ, рдЬреЛ рд╣рд░ рдмрд╛рд░ AuthenticatedEncryptor рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рдЯреНрд░рд┐рдЧрд░ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐, рджреВрд╕рд░реА рдУрд░, рдпреЛрдЬрдирд╛ рдХрднреА рднреА AuthenticatedEncryptor рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдкреБрди: рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдЬреАрд╕реА рдХреЛ рдорд┐рдЯрд╛ рджреЗрдЧрд╛ рдпрджрд┐ рд╣рдо рдПрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдЪрдВрдХ-рдПрдиреНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдПрдкреАрдЖрдИ (рдЙрджрд╛ред рдЪрдВрдХ = рдиреЗрдЯрд╡рд░реНрдХ рдкреИрдХреЗрдЯ) рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЦрдВрдб рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдПрдХ рдЕрд▓рдЧ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ (рдЙрджрд╛ред рдиреЗрдЯрдлреНрд▓рд┐рдХреНрд╕ рдПрдордПрд╕рдПрд▓ рдкреНрд░реЛрдЯреЛрдХреЙрд▓, рдЗрдиреНрдлрд░реНрдиреЛ, рдЕрдиреНрдп)ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдПрдирд╕реА/рдбреАрд╕реА рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЬрд╣рд╛рдВ рд╣рдо рдПрдИрдПрдбреА рдЗрдВрдЬрдиреЛрдВ рдХрд╛ рдПрдХ рдкреВрд▓ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдЙрд╕ рдкреВрд▓ рд╕реЗ рдПрдирд╕реА/рдбреАрд╕реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдзрд╛рд░ рд▓реЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЖрдЗрдП рдЬреАрд╕реА рдХреЛ рдереЛрдбрд╝рд╛ рдкреНрдпрд╛рд░ рджреЗрдВ :)

рдореЗрд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдХреНрд░рд┐рдкреНрдЯреЛ рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡реНрд╕ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдЙрджреНрджреЗрд╢реНрдп рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИред рдРрд╕рд╛ рд╣рд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ рдЧреИрд░ рдкреИрджрд╛ рдХрд░рдиреЗ рдкрд░ рдЬреЛрд░ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

  • рдЯреАрдПрд▓рдПрд╕ 1.2 рдЖрд░рдПрдлрд╕реА 5116 рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ рдФрд░ 4-рдмрд╛рдЗрдЯ IV рдХреЛ 8-рдмрд╛рдЗрдЯ рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддрд╛ рд╣реИ,
  • TLS 1.3 xor рдХрд╛ 8-рдмрд╛рдЗрдЯ рдХрд╛рдЙрдВрдЯрд░ 12-рдмрд╛рдЗрдЯ IV рдХреЗ рд╕рд╛рде 12 рдмрд╛рдЗрдЯреНрд╕ рддрдХ рдЧрджреНрджреЗрджрд╛рд░ рд╣реИ,
  • рд╢реЛрд░ рдПрдИрдПрд╕-рдЬреАрд╕реАрдПрдо рдХреЗ рд▓рд┐рдП рдмрдбрд╝реЗ-рдПрдВрдбрд┐рдпрди рдмрд╛рдЗрдЯ рдХреНрд░рдо рдореЗрдВ 8-рдмрд╛рдЗрдЯ рдХрд╛рдЙрдВрдЯрд░ рдкреИрдбреЗрдб 12 рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЪрд╛рдЪрд╛/рдкреЙрд▓реА рдХреЗ рд▓рд┐рдП рдЫреЛрдЯреЗ-рдПрдВрдбрд┐рдпрди рдмрд╛рдЗрдЯ рдСрд░реНрдбрд░ рдореЗрдВ 8-рдмрд╛рдЗрдЯ рдХрд╛рдЙрдВрдЯрд░ рдкреИрдбреЗрдб 12 рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рдЧреИрд░ рдЖрдХрд╛рд░ (96 рдмрд┐рдЯ) рдкрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЧреИрд░ рдХреЗ рд▓рд┐рдП рдЬреАрд╕реАрдПрдо рдмрд╣реБрдд рднрдВрдЧреБрд░ рд╣реИред рдФрд░ рдореИрдВ рдХрд┐рд╕реА рднреА рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реЗ рдЕрд╡рдЧрдд рдирд╣реАрдВ рд╣реВрдВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЧреИрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рдХреНрд░рд┐рдкреНрдЯреЛ рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдзрд┐рдХ рдПрдкреАрдЖрдИ рдХреА рдЕрдзрд┐рдХ рдорд╛рдВрдЧ рдирд╣реАрдВ рд╣реИред 99.9% рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕реБрд░рдХреНрд╖рд╛-рд╕рдВрдмрдВрдзреА рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╡реНрдпрдВрдЬрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкрд╛рд╕рд╡рд░реНрдб рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛, рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЖрд░рд╛рдо рд╕реЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдирд╛, рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдЕрдкрдбреЗрдЯ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЖрджрд┐ред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕реЗ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╡реНрдпрдВрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рджреБрд░реНрд▓рдн рд╣реИрдВред рдЙрдкрд▓рдмреНрдз рдПрдХрдорд╛рддреНрд░ рдПрдкреАрдЖрдИ рдЕрдХреНрд╕рд░ рдХреЗрд╡рд▓ рдПрдЪрдЯреАрдЯреАрдкреАрдПрд╕ рдФрд░ рдХреНрд░рд┐рдкреНрдЯреЛ рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд░реЛрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддреЗ рд╣реИрдВред рдЖрдИрдПрдордУ рд╕рдорд╛рдзрд╛рди рдЖрджрд┐рдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред рдпрд╣ рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рд╡реНрдпрдВрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рд╣реИред

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рдж! рдХреБрдЫ рдкреНрд░рд╢реНрди:

  1. рдЬрдмрдХрд┐ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рднрдпрд╛рд╡рд╣ рд░реВрдк рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди (рдПрдХ рдЧреИрд░-рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде) рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЧреИрд░-рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдзреНрд╡рдирд┐ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реИ? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ:
    рдПред рдХреБрдЫ рдПрд▓реНрдЧреЛрд░рд┐рджрдо (CCM, SIV) рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рд╣рдореЗрдВ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЛ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдкрд░ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕реНрдЯреНрд░реАрдо рдХрд┐рдП рдЧрдП рдЗрдирдкреБрдЯ рдХреЛ рдмрдлрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рд╡реНрдпреБрддреНрдкрдиреНрди рдХрдХреНрд╖рд╛рдУрдВ рд╕реЗ рдлреЗрдВрдХрдирд╛ рдЪрд╛рд╣рд┐рдП?
    рдмреАред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрд╛рдзрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдПрдПрдбреА рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдордп рдкрд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдХреБрдЫ рдХреЛ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдХреБрдЫ рдХреЛ рдЕрдВрдд рддрдХ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ)ред рдХреНрдпрд╛ рд╣рдореЗрдВ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рд╡реНрдпрдХреНрддрд┐рдЧрдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ?
  1. рд╣рдо INonceProvider рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдЦреБрд▓реЗ рд╣реИрдВ, рдЬрдм рддрдХ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдПрдХ рдирдпрд╛ рдЧреИрд░ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдиреНрдп рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдЖрдХрд╛рд░ рд╣реИ?

1. рдП = рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдореБрджреНрджрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЬрд▓реНрджреА рдЪреЗрддрд╛рд╡рдиреА рди рджреА рдЬрд╛рдПред рдКрдкрд░ рдХреЗ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдкрд░рд┐рджреГрд╢реНрдп рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ, рдПрдХ 10GB рдлрд╝рд╛рдЗрд▓ред рдЙрдиреНрд╣реЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдлрд┐рд░ рдХреБрдЫ рд╕рдордп рдмрд╛рдж рдПрдХ рдФрд░ рджреЗрд╡ рд╕рд┐рдлрд░ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЕрдЧрд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдб рдПрдХ рдореВрд▓реНрдп рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 10 рдЬреАрдмреА (рдпрд╛ рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛) рдмрдлрд░рд┐рдВрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред

  1. рдмреА = рдлрд┐рд░ рд╕реЗ "рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ" рдпрд╛ рдиреЗрдЯрд╡рд░реНрдХрд┐рдВрдЧ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдИрдПрд╕ рдЬреАрд╕реАрдПрдо рдЖрджрд┐ рдЖрдкрдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рдЕрдВрдд рддрдХ рдПрдПрдбреА рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХрд╛ рд╕рд╡рд╛рд▓ рд╣реИ, рдореБрдЭреЗ рдЕрднреА рддрдХ рдРрд╕рд╛ рдХреЛрдИ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИред рддреЛ рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред
  1. рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЧреИрд░ рдореБрджреНрджрд╛ рд╣реИ, рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧреИрд░ рдХреЗ рд▓рд┐рдП "рдмрд╛рдЗрдЯреНрд╕" рдХреА рдЖрдкреВрд░реНрддрд┐ рдХрд░рдирд╛ рдпрд╛ рд╕реАрдзреЗ рди рддреЛ рдпрд╣рд╛рдВ рдФрд░ рди рд╣реА рд╡рд╣рд╛рдВ рд╣реИред рдЖрдк рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХреЛ рджреЛрдиреЛрдВ рддрд░реАрдХреЛрдВ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдореИрдВ рдЗрд╕реЗ рдПрдХ рдЖрджрд┐рдо рдХреЗ рд▓рд┐рдП рдмрджрд╕реВрд░рдд рдкрд╛рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рд▓реЛрдЧреЛрдВ рдХреЛ рд░рд╛рдд рдореЗрдВ рдмреЗрд╣рддрд░ рдиреАрдВрдж рджреЗрддрд╛ рд╣реИ рддреЛ рдореИрдВ рдЗрд╕рдХрд╛ рдЬреЛрд░рджрд╛рд░ рд╡рд┐рд░реЛрдз рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВ рдЗрд╕реЗ рдПрдХ рдкреВрд░реНрдг рд╕реМрджреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдВрдж рдХрд░ рджреВрдВрдЧрд╛, рдФрд░ рдЕрдиреНрдп рдореБрджреНрджреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝реВрдВрдЧрд╛ред

рд╡рд┐рдЪрд╛рд░-рд╡рд┐рдорд░реНрд╢ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ

@bartonjs : рд╣рдо рдкреВрд░реЗ рджрд┐рди рдмрд╣рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рднрд╛рдЧреАрджрд╛рд░реА рд╕реЗ рд░рд╣рд┐рдд рдмрдВрдж рджрд░рд╡рд╛рдЬреЗ рдХреЗ рдлреИрд╕рд▓реЗ рдПрдХ рдкреНрд░рднрд╛рд╡реА рдФрдЪрд┐рддреНрдп рд╣реИ рд▓реЗрдХрд┐рди рд╣рдо рд╡рд┐рд╖рдп рд╕реЗ рд╣рдЯ рдЬрд╛рдПрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рд░рд╣рдиреЗ рджреВрдВрдЧрд╛ред рд╕рд╛рде рд╣реА, рдЖрдордиреЗ-рд╕рд╛рдордиреЗ рдпрд╛ рд░реАрдпрд▓ рдЯрд╛рдЗрдо рдХрдореНрдпреБрдирд┐рдХреЗрд╢рди рдХреЗ рдмрд┐рдирд╛, рдореИрдВ рд╡рд╣рд╛рдВ рдХрд┐рд╕реА рдХреЛ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред

рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ

1. 'рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХрд╛ рдорддрд▓рдм рдПрдИрдПрд╕-рдЬреАрд╕реАрдПрдо рд╕реБрд░рдХреНрд╖рд╛ рдирд╣реАрдВ рд╣реИ' рддрд░реНрдХ

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╕реНрдЯреАрдорд┐рдВрдЧ => рдЯреИрдЧ рд╕рддреНрдпрд╛рдкрди рд╕реЗ рдкрд╣рд▓реЗ рдХреЙрд▓рд░ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯреЗрдб рдбреЗрдЯрд╛ рд▓реМрдЯрд╛рдПрдВ => рдХреЛрдИ рд╕реБрд░рдХреНрд╖рд╛ рдирд╣реАрдВред рдпрд╣ рдЖрд╡рд╛рдЬ рдирд╣реАрдВ рд╣реИред @bartonjs рдХрд╛ рджрд╛рд╡рд╛ рд╣реИ 'рдЪреБрдирд╛ рд╣реБрдЖ рд╕рд┐рдлрд░рдЯреЗрдХреНрд╕реНрдЯ => рд╡реЙрдЪ рдЖрдЙрдЯрдкреБрдЯ => рд░рд┐рдХрд╡рд░ рдХреА' рдЬрдмрдХрд┐ @drawaes рдХрд╛ рджрд╛рд╡рд╛ рд╣реИ 'рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдг рдЗрдирдкреБрдЯ => рдЗрд╕рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рдЬрд╛рдиреЗрдВ => "рд╡рд╣рд╛рдВ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдВ" '

рдЦреИрд░, рдПрдИрдПрд╕-рдЬреАрд╕реАрдПрдо рдореЗрдВ, рдЯреИрдЧ рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ рд╣реИ рдЕрдЦрдВрдбрддрд╛ рд╕рддреНрдпрд╛рдкрди (рдЫреЗрдбрд╝рдЫрд╛рдбрд╝ рд╕реБрд░рдХреНрд╖рд╛)ред рдЧреЛрдкрдиреАрдпрддрд╛ рдкрд░ рдЗрд╕рдХрд╛ 0 рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрджрд┐ рдЖрдк AES-GCM рд╕реЗ GCM/GHASH рдЯреИрдЧ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдмрд╕ AES-CTR рдореЛрдб рдорд┐рд▓ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдирд┐рд░реНрдорд╛рдг рд╣реИ рдЬреЛ рдЧреЛрдкрдиреАрдпрддрд╛ рдкрд╣рд▓реВ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред рдФрд░ рд╕реАрдЯреАрдЖрд░ рдмрд┐рдЯ рдлрд╝реНрд▓рд┐рдк рдХреЗ рд▓рд┐рдП рд▓рдЪреАрд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рджреЛрдиреЛрдВ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЬреЛрд░ рджреЗ рд░рд╣реЗ рд╣реИрдВ (рдХреБрдВрдЬреА рдпрд╛ рд╕рд╛рджреЗ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛) рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ "рдЯреВрдЯрд╛" рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛ рдХрд┐ рдореМрд▓рд┐рдХ рдПрдИрдПрд╕ рдЖрджрд┐рдо рд╕реЗ рд╕рдордЭреМрддрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХрд╛ рдХреНрд░рд┐рдкреНрдЯреЛрдПрдирд╛рд▓рд┐рд╕реНрдЯ (рдпрд╣ рдХреМрди рд╣реИ?) рдХреБрдЫ рдРрд╕рд╛ рдЬрд╛рдирддрд╛ рд╣реИ рдЬреЛ рд╣рдордореЗрдВ рд╕реЗ рдмрд╛рдХреА рд▓реЛрдЧ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдЙрд╕реЗ рдЗрд╕реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рд╕рдВрднрд╡ рд╣реИ, рдПрдХ рд╣рдорд▓рд╛ рдмрд┐рдЯ рдПрди рдХреЛ рдлреНрд▓рд┐рдк рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЬрд╛рди рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдкреНрд▓реЗрдирдЯреЗрдХреНрд╕реНрдЯ рдХрд╛ рдмрд┐рдЯ рдПрди рдлрд╝реНрд▓рд┐рдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рд▓реЗрдХрд┐рди рд╡реЗ рдХрднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд▓реЗрдирдЯреЗрдХреНрд╕реНрдЯ рдХреНрдпрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП

1) рд╕рд╛рджрд╛ рдкрд╛рда рдЧреЛрдкрдиреАрдпрддрд╛ рд╣рдореЗрд╢рд╛ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рддреА рд╣реИ
2) рдЕрдЦрдВрдбрддрд╛ рд╕рддреНрдпрд╛рдкрди рдХреЛ рдХреЗрд╡рд▓ (рд╕реНрдЯреНрд░реАрдо рдХреЗ рдЕрдВрдд рддрдХ) рд╕реНрдердЧрд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░
3) рдХрд┐рд╕реА рднреА рдХреБрдВрдЬреА рд╕реЗ рдХрднреА рд╕рдордЭреМрддрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЙрди рдЙрддреНрдкрд╛рджреЛрдВ рдФрд░ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╣рд╛рдВ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдореВрд▓рднреВрдд рд╣реИ, рдЕрдм рдЖрдк рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЯреНрд░реЗрдбрдСрдлрд╝ рдЗрдВрдЬреАрдирд┐рдпрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдПрдХ рдкрд▓ рдХреЗ рд▓рд┐рдП AEAD рд╕реЗ рдирд┐рдпрдорд┐рдд AES рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреА рдУрд░ рдХрджрдо рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдлрд┐рд░ рдЯреИрдЧ рд╕рддреНрдпрд╛рдкрди рдкрд░ AEAD рдореЗрдВ рд╡рд╛рдкрд╕ рдХрджрдо рд░рдЦреЗрдВред рдпрд╣ рдЬрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдЕрдкрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдирд╡реАрди рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рдЕрдирд▓реЙрдХ рдХрд░рддрд╛ рд╣реИ "рдЖрдк рд╡рд╣ рд╕рдм рдмрдлрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рдХреНрдпрд╛ рдЖрдк рдкрд╛рдЧрд▓ рд╣реИрдВ? рд╣рдо рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ!"ред

рд╕рднреА рдХреНрдпреЛрдВрдХрд┐ рдЖрдк Encrypt рдФрд░ EncryptFinal (рдпрд╛ рд╕рдордХрдХреНрд╖) рджреЛрдиреЛрдВ рдХреЗ рдмрдЬрд╛рдп рдХреЗрд╡рд▓ EncryptFinal рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

2. рдЬреАрд╕реАрдПрдо рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╣реАрдВ!

рдЕрдм рдПрдИрдПрд╕-рдЬреАрд╕реАрдПрдо рдХреЛрдИ рдЬрд╛рджреБрдИ рдЬрд╛рдирд╡рд░ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдореЗрдВ "рдЙрдлрд╝ рдореЛрдореЗрдВрдЯреНрд╕" рдкреНрд░рдЪреБрд░ рдорд╛рддреНрд░рд╛ рдореЗрдВ рд╣реЛрдВред рдпрд╣ рдХреЗрд╡рд▓ AES-CTR + GHASH рд╣реИ (рдпрджрд┐ рд╣реЛ рд╕рдХреЗ рддреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИрд╢)ред рдЧреЛрдкрдиреАрдпрддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЧреИрд░-рд╡рд┐рдЪрд╛рд░ CTR рдореЛрдб рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗ рд╣реИрдВ рдФрд░ рдЕрдЦрдВрдбрддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЯреИрдЧ рд╡рд┐рдЪрд╛рд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореЗрдВ рдЕрдиреБрдордд рдЪрд░ рдЯреИрдЧ рдЖрдХрд╛рд░реЛрдВ рд╕реЗ рдЖрддреЗ рд╣реИрдВред рдлрд┐рд░ рднреА, AES-CTR + GHASH, AES-CBC + HMAC-SHA256 рдЬреИрд╕реЗ рдХреБрдЫ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓рд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ рдФрд░ рджреВрд╕рд░рд╛ рдЕрдЦрдВрдбрддрд╛ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред AES-CBC + HMAC-SHA256 рдореЗрдВ, рд╕рд┐рдлрд░рдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ рдмрд┐рдЯ рдлрд╝реНрд▓рд┐рдк рдбрд┐рдХреНрд░рд┐рдкреНрдЯреЗрдб рдЯреЗрдХреНрд╕реНрдЯ (CTR рдХреЗ рд╡рд┐рдкрд░реАрдд) рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдмреНрд▓реЙрдХ рдХреЛ рджреВрд╖рд┐рдд рдХрд░ рджреЗрдЧрд╛ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбрд┐рдХреНрд░рд┐рдкреНрдЯреЗрдб рдкреНрд▓реЗрдирдЯреЗрдХреНрд╕реНрдЯ рдмреНрд▓реЙрдХ (рдЬреИрд╕реЗ CTR) рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдлреНрд▓рд┐рдк рдмрд┐рдЯреНрд╕ рднреА рдХрд░реЗрдЧрд╛ред рдлрд┐рд░, рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдкрд░рд┐рдгрд╛рдореА рдкреНрд▓реЗрдирдЯреЗрдХреНрд╕реНрдЯ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ - рдмрд╕ рдмрд┐рдЯреНрд╕ рдлрд╝реНрд▓рд┐рдк рдХрд┐рдП рдЧрдП рдереЗ (рдЬреИрд╕реЗ CTR)ред рдЕрдВрдд рдореЗрдВ, рдЕрдЦрдВрдбрддрд╛ рдЬрд╛рдВрдЪ (HMAC-SHA256) рдЗрд╕реЗ рдкрдХрдбрд╝ рд▓реЗрдЧреАред рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рдмрд╛рдЗрдЯ (рдЬреИрд╕реЗ GHASH) рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ред

рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЕрдЦрдВрдбрддрд╛ рдареАрдХ рд╣реЛрдиреЗ рддрдХ рд╕рднреА рдбрд┐рдХреНрд░рд┐рдкреНрдЯреЗрдб рдбреЗрдЯрд╛ рдХреЛ рд╡рд╛рдкрд╕ рд░рдЦрдиреЗ рдХрд╛ рдЖрдкрдХрд╛ рддрд░реНрдХ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реИ - рдЗрд╕реЗ рд▓рдЧрд╛рддрд╛рд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП рдПрдИрдПрд╕-рд╕реАрдмреАрд╕реА рдкрде рд╕реЗ рдирд┐рдХрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рдПрдЪрдПрдордПрд╕реА-рдПрд╕рдПрдЪрдП256 рдкрд╛рд╕ рд╣реЛрдиреЗ рддрдХ рдмрдлрд░ (рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рджреНрд╡рд╛рд░рд╛) рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХрд╛ рдореВрд▓ рд░реВрдк рд╕реЗ рдорддрд▓рдм рд╣реИ рдХрд┐ .NET рдкрд░, рдХреЛрдИ рднреА рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛ AEAD рдЕрдЧреНрд░рд┐рдореЛрдВ рд╕реЗ рднреА рд▓рд╛рдн рдирд╣реАрдВ рдЙрдард╛ рд╕рдХрддрд╛ рд╣реИред .NET рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛ рдХреЛ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░рддрд╛ рд╣реИред рдХреЛрдИ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдпрд╛ рдирд┐рдпрдорд┐рдд рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рдмреАрдЪ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдХреЛрдИ рдПрдИрдПрдбреА рдирд╣реАрдВред рдЬрд╣рд╛рдВ рдмрдлрд░рд┐рдВрдЧ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдЕрд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИ, рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЯреНрд╕ рдХреЗ рдкрд╛рд╕ рдХрдо рд╕реЗ рдХрдо рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ "рдЖрдкрдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЖрдВрдЦреЗрдВ рдирд╣реАрдВ" рдХреЗ рдмрдЬрд╛рдп "рдбреНрд░реЛрди рдлреБрдЯреЗрдЬ рднреНрд░рд╖реНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ"ред

3. рдпрд╣ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ

рдбреЗрдЯрд╛ рдмрдбрд╝рд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдордЬрдмреВрдд рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рднреА рдПрдХ рд░рд┐рдпрд▓рд┐рдЯреА рдбрд┐рдЬрд╛рдЗрдирд░реЛрдВ рдХреЛ рдЧрд▓реЗ рд▓рдЧрд╛рдирд╛ рд╣реИред рдЬрдм рддрдХ рджреБрдирд┐рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХреАрдХреГрдд AEAD рдПрд▓реНрдЧреЛрд░рд┐рдердо рддреИрдпрд╛рд░ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рднреНрд░рд╖реНрдЯрд╛рдЪрд╛рд░ рдХреЗ рдордзреНрдп-рдзрд╛рд░рд╛ рдЫреЗрдбрд╝рдЫрд╛рдбрд╝ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рдо рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди + рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдмреЛрд▓реНрдЯ-рдСрди-рдмрдбреНрдбреА рдХреЗ рд░реВрдк рдореЗрдВ рдлрдВрд╕ рдЧрдП рд╣реИрдВред рдЯреНрд░реВ AEAD рдкреНрд░рд┐рдорд┐рдЯрд┐рд╡ рдкрд░ рд╢реЛрдз рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЕрднреА рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди + рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдорд┐рд▓рд╛ рд╣реИред

рдореИрдВ "рдПрдИрдПрд╕-рдЬреАрд╕реАрдПрдо" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрддрдирд╛ рд╣реА рдХрдо рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реВрдВ рдЬрд┐рддрдирд╛ рдХрд┐ рдореИрдВ рдПрдХ рддреЗрдЬ, рд▓реЛрдХрдкреНрд░рд┐рдп рдПрдИрдПрдбреА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╡рд░реНрдХрд▓реЛрдб рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддрд╛ рд╣реИ - рдбреЗрдЯрд╛-рд╕рдореГрджреНрдз, рд╣рд╛рдЗрдкрд░-рдХрдиреЗрдХреНрдЯреЗрдб рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╕реБрдкрд░ рдкреНрд░рдЪрд▓рд┐рдд рд╣реИред

4. рдПрдИрдПрд╕-рд╕реАрдмреАрд╕реА-рдПрдЪрдПрдордПрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдбрд╛рд▓реЗрдВ)

рдХреНрд░рд┐рдкреНрдЯреЛ рдмреЛрд░реНрдб рдкрд╣рд▓реЗ рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЬреАрд╕реАрдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░реЗрдЧрд╛, рдмрд▓реНрдХрд┐ рд╕реАрдмреАрд╕реА + рдПрдЪрдПрдордПрд╕реАред

рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рдм рдХреБрдЫ рдпрд╛ рдкрд░рд┐рджреГрд╢реНрдп рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ - рдПрдИрдПрд╕-рд╕реАрдмреАрд╕реА-рдПрдЪрдПрдордПрд╕реА рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдирд╛ рдореБрдлрд╝реНрдд рдирд╣реАрдВ рд╣реИред рдпрд╣ AES-GCM рдХреА рддреБрд▓рдирд╛ рдореЗрдВ ~ 3x рдзреАрдорд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ AES-CBC рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдЧреИрд░-рд╕рдорд╛рдирд╛рдВрддрд░ рд╣реИ рдФрд░ рдЪреВрдВрдХрд┐ GHASH рдХреЛ PCLMULQDQ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддреНрд╡рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддреЛ рдЕрдЧрд░ рдЖрдк рдПрдИрдПрд╕-рдЬреАрд╕реАрдПрдо рдХреЗ рд╕рд╛рде 1 рдЬреАрдмреА/рд╕реЗрдХрдВрдб рдкрд░ рд╣реИрдВ, рддреЛ рдЕрдм рдЖрдк рдПрдИрдПрд╕-рд╕реАрдмреАрд╕реА-рдПрдЪрдПрдордПрд╕реА рдХреЗ рд╕рд╛рде ~ 300 рдПрдордмреА/рд╕реЗрдХрдВрдб рд╣рд┐рдЯ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдлрд┐рд░ рд╕реЗ "рдХреНрд░рд┐рдкреНрдЯреЛ рдЖрдкрдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЗрд╕реЗ рдЫреЛрдбрд╝ рджреЗрдВ" рдорд╛рдирд╕рд┐рдХрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ - рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рд▓реЛрдЧ рд▓рдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдбрд╝реА рдореЗрд╣рдирдд рдХрд░рддреЗ рд╣реИрдВред

рдкреНрд░рддреНрдпреЗрдХ 4k рдлреНрд░реЗрдо рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдирд╛

рд╡реАрдбрд┐рдпреЛ рдХреЛрдбреЗрдХреНрд╕ рдХреЛ рдЕрдЪрд╛рдирдХ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╛ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдкрд░рдд рдХреЛ рдЕрдм рд╡реАрдбрд┐рдпреЛ рдХреЛрдбреЗрдХ рдХреЛ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╣ рдбреЗрдЯрд╛ рд╕реБрд░рдХреНрд╖рд╛ рд╕реНрддрд░ рдкрд░ рдмрд╕ рдПрдХ рдмрд┐рдЯрд╕реНрдЯреНрд░реАрдо рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╡реАрдбрд┐рдпреЛ/рдЬреАрдиреЛрдорд┐рдХ рдбреЗрдЯрд╛/рдЫрд╡рд┐рдпрд╛рдВ/рдорд╛рд▓рд┐рдХрд╛рдирд╛ рдкреНрд░рд╛рд░реВрдк рдЗрддреНрдпрд╛рджрд┐ рд╣реИ, рд╕реБрд░рдХреНрд╖рд╛ рд╕реНрддрд░ рдХреА рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдПрдХ рд╕рдордЧреНрд░ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдореБрдЦреНрдп рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдХрд╛ рдореЗрд▓ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ

NIST 96 рдмрд┐рдЯ рд╕реЗ рдЕрдзрд┐рдХ рд▓рдВрдмрд╛рдИ рдХреЗ рд▓рд┐рдП рдпрд╛рджреГрдЪреНрдЫрд┐рдХ IVs рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред NIST 800-38D рдкрд░ рдЦрдВрдб 8.2.2 рджреЗрдЦреЗрдВред рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рдирдпрд╛ рдирд╣реАрдВ рд╣реИ, рдЧреИрд░-рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╕реАрдЯреАрдЖрд░ рдореЛрдб рд╕реЗ рдЖрддреА рд╣реИрдВред рдЬреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реНрдЯреНрд░реАрдо рд╕рд┐рдлрд░ рдореЗрдВ рднреА рдХрд╛рдлреА рдорд╛рдирдХ рд╣реИ ред рдореИрдВ рдЧреИрд░ рдХреЗ рдкреНрд░рддрд┐ рдЕрдЪрд╛рдирдХ рднрдп рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддрд╛ - рдпрд╣ рд╣рдореЗрд╢рд╛ number used once рд░рд╣рд╛ рд╣реИред рдлрд┐рд░ рднреА, рдЗрд╕рд▓рд┐рдП рдЬрдмрдХрд┐ INonce рдмрд╣рд╕ рдПрдХ рднрджреНрджреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рдмрдирд╛рддреА рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдиреЛ-рд╕реНрдЯреНрд░реАрдо-рдлреЙрд░-рдпреВ рдереЛрдкрдиреЗ рдЬреИрд╕реЗ рдирд╡рд╛рдЪрд╛рд░ рдХреЛ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рд╣рдо AEAD рд╕реБрд░рдХреНрд╖рд╛ + рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╡рд░реНрдХрд▓реЛрдб рдЗрдиреЛрд╡реЗрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдореИрдВ рдХрд┐рд╕реА рднреА рджрд┐рди INonce рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реВрдВрдЧрд╛ред рдореБрдЭреЗ рдЗрдиреЛрд╡реЗрд╢рди рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдЬреИрд╕реА рдмреБрдирд┐рдпрд╛рджреА рдЪреАрдЬрд╝реЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдирдлрд░рдд рд╣реИ - рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рд╣рдо рдкреАрдЫреЗ рд╣рдЯ рдЬрд╛рдПрдВрдЧреЗред

рдореБрдЭреЗ рдЧрд▓рдд рд╕рд╛рдмрд┐рдд рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛

рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ рд▓рдбрд╝рдХрд╛ рд╣реВрдВ рдЬрд┐рд╕рдиреЗ рдХрд╛рдо рдкрд░ рдПрдХ рд▓рдВрдмреЗ рджрд┐рди рдХреЗ рдмрд╛рдж рдЕрдкрдиреЗ рдмрдЪреНрдЪреЛрдВ рдХреЗ рд╕рд╛рде рдореВрд╡реА рд░рд╛рдд рдХреЛ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред рдореИрдВ рдердХ рдЧрдпрд╛ рд╣реВрдБ рдФрд░ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЙрдкрд╛рдЦреНрдпрд╛рдиреЛрдВ рдпрд╛ "рд╕рдорд┐рддрд┐ рдХрд╛рд░рдгреЛрдВ" рдпрд╛ рдХреБрдЫ рдЕрдиреНрдп рдЬрд╛рджреВ рдХреЗ рдмрдЬрд╛рдп рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЦреБрд▓рд╛ рддрдереНрдп рдЖрдзрд╛рд░рд┐рдд рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рд╕рдВрд╡рд╛рдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рд╕реБрд░рдХреНрд╖рд┐рдд .NET рдФрд░ Azure рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреЗ рд╡реНрдпрд╡рд╕рд╛рдп рдореЗрдВ рд╣реВрдБред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдВрд░реЗрдЦрд┐рдд рд▓рдХреНрд╖реНрдп рд╣реИрдВред

рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рд╕рдВрд╡рд╛рдж рдХреА рдмрд╛рдд рд╣реЛ рд░рд╣реА рд╣реИ ...

рдХреНрдпрд╛ рд╣рдо рдХреГрдкрдпрд╛ рдПрдХ рд╕рдореБрджрд╛рдп рд╕реНрдХрд╛рдЗрдк рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЬрдЯрд┐рд▓ рд╡рд┐рд╖рдп рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╛рда рдХреА рдПрдХ рд╡рд┐рд╢рд╛рд▓ рджреАрд╡рд╛рд░ рдмрди рдЬрд╛рддреА рд╣реИред рдорд╛рди рдЬрд╛рдУ рдирд╛?

рдХреГрдкрдпрд╛ рд╕реНрдХрд╛рдЗрдк рдХреЙрд▓ рди рдХрд░реЗрдВ - рдпрд╣реА "рдХреНрд▓реЛрдЬреНрдб рдбреЛрд░ рдореАрдЯрд┐рдВрдЧ" рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рдореБрджрд╛рдп рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд░рд┐рдХреЙрд░реНрдб рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред рд╕рднреА рдкрдХреНрд╖реЛрдВ рдХреЗ рд▓рд┐рдП рдирд╛рдЧрд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬреА рдкреНрд░рд╡рдЪрди (рдПрдордПрд╕-рдЯрд┐рдкреНрдкрдгреА-рдирд┐рд╖реНрдХрд╛рд╕рди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛) рдХреЗ рд▓рд┐рдП рдЬреАрдердм рдореБрджреНрджреЗ рд╕рд╣реА рд╡рд╛рд╣рди рд╣реИрдВред

рдПрдордПрд╕ рдХреНрд░рд┐рдкреНрдЯреЛ рд░рд┐рд╡реНрдпреВ рдмреЛрд░реНрдб рдиреЗ рд╢рд╛рдпрдж рд╕реНрдХрд╛рдЗрдк рдХреЙрд▓ рднреА рдХрд┐рдпрд╛ рдерд╛ред рдпрд╣ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рдПрдордПрд╕ рд▓реЛрдЧреЛрдВ рдХреА рдЧрд▓рддреА рдирд╣реАрдВ рд╣реИ - рдПрдордПрд╕ рдХреНрд░рд┐рдкреНрдЯреЛ рд░рд┐рд╡реНрдпреВ рдмреЛрд░реНрдб (рдЬреЛ рднреА/рдЬреЛ рднреА рд╣реИ) рдХреЗ рд╣рд╛рдереАрджрд╛рдВрдд рдЯрд╛рд╡рд░реЛрдВ рдкрд░ рдЙрдирдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕реАрдорд┐рдд рдкрд╣реБрдВрдЪ рдФрд░ рдЕрдиреБрдирдп рд╢рдХреНрддрд┐ рд╣реИред

AEAD рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ:

рдЬреАрд╕реАрдПрдо, рд╕реАрдЯреАрдЖрд░+рдПрдЪрдПрдордПрд╕реА рдЬреИрд╕реЗ рдореИрдХ-рдЕрдВрддрд┐рдо рдореЛрдб рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдЯ-рд╕рд╛рдЗрдЬрд╝ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ _рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди_ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реАрд╕реАрдПрдо рдЬреИрд╕реЗ рдореИрдХ-рдкреНрд░рдердо рдореЛрдб рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдмрд╛рдЗрдЯ-рд╕рд╛рдЗрдЬрд╝ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ _decryption_ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рд▓реАрдХ рд╣реЛ рд░рд╣реА рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред CBC+HMAC рдХреЗ рд▓рд┐рдП рдмреНрд▓реЙрдХ-рд╕рд╛рдЗрдЬрд╝ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ _encryption_ рднреА рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред рдЕрд░реНрдерд╛рддред AEAD рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдЯ-рдЖрдХрд╛рд░ рдпрд╛ рдмреНрд▓реЙрдХ-рдЖрдХрд╛рд░ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рд╣реИрдВред

рдЪрдВрдХ-рд╕рд╛рдЗрдЬрд╝ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ _рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди_ рдФрд░ _рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди_ рдмрдврд╝рд┐рдпрд╛ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХреА 2 рдмрд╛рдзрд╛рдПрдВ рд╣реИрдВ:

  • рдЙрдиреНрд╣реЗрдВ рдмрдлрд░рд┐рдВрдЧ (рдкрд░реЗ-рдмреНрд▓реЙрдХ-рдЖрдХрд╛рд░) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА/рдПрдкреАрдЖрдИ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдмрдлрд░рд┐рдВрдЧ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд/рдХреИрдкреНрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЙрджрд╛ред рдЗрдиреНрдлрд░реНрдиреЛ), рдпрд╛ рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдКрдкрд░реА рдкрд░рдд (рдХреЙрд▓рд┐рдВрдЧ рдкрд░рдд) рдкрд░ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

  • рдЦрдВрдбрд┐рдд рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ AEAD рдорд╛рдирдХреАрдХреГрдд рдирд╣реАрдВ рд╣реИред рднреВрддрдкреВрд░реНрд╡ред рдиреИрдХ-рд╕реНрдЯреНрд░реАрдо , рдЗрдиреНрдлрд░реНрдиреЛ, рдПрдордПрд╕-рдУрди рдбреЗрдЯрд╛рдкреНрд░реЛрдЯреЗрдХреНрд╢рди, рдореЗрдХ-рдпреЛрд░-рдУрдиред

рдпрд╣ рдЗрд╕ рдмрд╛рдд рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢ рд╣реИ рдХрд┐ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕рднреА рд▓реЛрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреНрдпрд╛ рдЬрд╛рдирддреЗ рд╣реИрдВред

@sdrapkin , рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдореИрдВ рдареАрдХ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЛрдИ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдирд╣реАрдВ рд╣реИ?

@sdrapkin рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рджрд┐рдорд╛рдЧреА рддреВрдлрд╛рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдлрд╛рдпрджреЗрдордВрдж рд╣реИ, рд░рд┐рдХреЙрд░реНрдб рд░рдЦрдиреЗ рдХреА рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рдореАрдЯрд┐рдВрдЧ рдорд┐рдирдЯреЛрдВ рдХреЗ рд╕рд╛рде рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддрдХрдиреАрдХреА рдкрдХреНрд╖ рдкрд░ рд╡рд╛рдкрд╕, рдЬрдмрдХрд┐ рдЪрдВрдХрд┐рдВрдЧ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдирд┐рдореНрди рд╕реНрддрд░ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдЖрджрд┐рдо рдирд╣реАрдВ рд╣реИред рдпрд╣ рдПрдХ рдХрд╕реНрдЯрдо рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИред рдФрд░ рдЖрдкрдХреЗ рдЬреИрд╕рд╛ рдПрдХ рдЧреИрд░-рдорд╛рдирдХ рдПрдХ рдиреЛрдЯ рдХрд┐рдпрд╛ред

@morganbr

_рдХреНрдпрд╛ рдЖрдк рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЗрд╕ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЛрдИ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдирд╣реАрдВ рд╣реИ?_

рдирд╣реАрдВ, рдореИрдВ рдирд╣реАрдВ рд╣реВрдБред рдпрджрд┐ рдРрд╕рд╛ рдПрдкреАрдЖрдИ рдЙрдкрд▓рдмреНрдз рд╣реЛрддрд╛, рддреЛ рдПрдХ рдЖрдХрд╛рд░ рдХрд╛ рд╕реНрдЯреНрд░реАрдо-рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд╕рд┐рдлрд░рдЯреЗрдХреНрд╕реНрдЯ рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реЛрддрд╛, рдЬрд┐рд╕реЗ рдХреЛрдИ рдмрдлрд░-рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди (рдореЗрдореЛрд░реА рд╕реЗ рдмрд╛рд╣рд░) рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

^^^^ рдпрд╣, рдЕрдм рддрдХ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдордЭреМрддрд╛ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рднреА рд╕рд╣рдордд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдпрд╣ рдПрдХ рдЕрд╕рдордорд┐рдд рдПрдкреАрдЖрдИ рдПрдХ рдЖрдкрджрд╛ рд╣реЛрдЧреАред рджреЛрдиреЛрдВ "рдЕрд░реЗ рдереЗ рд╕реНрдЯреНрд░реАрдо рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдореИрдВ рднрд░реЛрд╕рд╛ рдХрд░реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд╡рд┐рдзрд┐рдпрд╛рдВ рдереАрдВ", рдФрд░ рдЙрдкрд░реЛрдХреНрдд @sdrapkin рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░рдгред

@Drawaes рд╕рд╣рдордд рд╣реБрдПред рдЕрд╕рдордорд┐рдд рдПрдирд╕реА/рдбреАрд╕реА рдПрдкреАрдЖрдИ рднрдпрд╛рдирдХ рд╣реЛрдЧрд╛ред

рдХреЛрдИ рдЕрдкрдбреЗрдЯ рджреЛрд╕реНрддреЛрдВ?

рдЬрд╛рд╣рд┐рд░ рддреМрд░ рдкрд░ рдореИрдВрдиреЗ рдХреБрдЫ рд╣рдорд▓реЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ред

рд╕реНрдЯреНрд░реАрдо рд╕рд┐рдлрд░ (рдЬреЛ рдПрдИрдПрд╕-рд╕реАрдЯреАрдЖрд░ рдФрд░ рдПрдИрдПрд╕-рдЬреАрд╕реАрдПрдо рд╣реИрдВ) рдореЗрдВ рдирд┐рд╣рд┐рдд рдХрдордЬреЛрд░рд┐рдпрд╛рдВ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдкреНрд▓реЗрдирдЯреЗрдХреНрд╕реНрдЯ рд░рд┐рдХрд╡рд░реА рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЪреБрдиреЗ рд╣реБрдП рд╕рд┐рдлрд░рдЯреЗрдХреНрд╕реНрдЯ рд╣рдорд▓реЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВред рдЪреБрдиреЗ рд╣реБрдП рд╕рд┐рдлрд░рдЯреЗрдХреНрд╕реНрдЯ рд╣рдорд▓реЛрдВ рд╕реЗ рдмрдЪрд╛рд╡ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╣реИ; рдЗрд╕рд▓рд┐рдП рдПрдИрдПрд╕-рдЬреАрд╕реАрдПрдо рдкреНрд░рддрд┐рд░рдХреНрд╖рд╛ рд╣реИ ... рдЬрдм рддрдХ рдХрд┐ рдЖрдк рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЖрдк рд╕рд╛рдЗрдб-рдЪреИрдирд▓ рдЕрд╡рд▓реЛрдХрдиреЛрдВ рд╕реЗ рдкрд╣рдЪрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рд╛рджрд╛ рдкрд╛рда рдХреНрдпрд╛ рд╣реЛрддрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдбрд┐рдХреНрд░рд┐рдкреНрдЯреЗрдб рдбреЗрдЯрд╛ рдХреЛ рдПрдХреНрд╕рдПрдордПрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рддреЛ рдпрд╣ рдмрд╣реБрдд рдЬрд▓реНрджреА рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕ рдпрд╛ < рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рд╡рд░реНрдг рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╣реИрдВред рддреЛ рдпрд╣ "рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рд╕реНрдЯреНрд░реАрдо рд╕рд┐рдлрд░ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рд╕рд╛рде рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИ" (рдЬреЛ, рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛, .NET рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдирд╣реАрдВ рд╣реИ)ред

рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреБрдВрдЬреА рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдХрд╣рд╛рдВ рд╕реЗ рдЖ рд░рд╣реА рдереА, рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЬреИрд╕реЗ рдХрд╛рдЧрдЬрд╛рдд рд╣реИрдВрдЬреАрд╕реАрдПрдо (рдлрд░реНрдЧреНрдпреВрд╕рди/рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ) рдореЗрдВ рдХрдордЬреЛрд░рд┐рдпрд╛рдВ рд╣реИрдВ , рд▓реЗрдХрд┐рди рд╡рд╣ рдЫреЛрдЯреЗ рдЯреИрдЧ рдЖрдХрд╛рд░реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреБрдВрдЬреА рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИ (рдЬреЛ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗрд╡рд▓ 96-рдмрд┐рдЯ рдЯреИрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ)ред рдореБрдЭреЗ рд╢рд╛рдпрдж рдЕрдиреНрдп рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреБрдВрдЬреА рд░рд┐рдХрд╡рд░реА рд╡реИрдХреНрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд▓рд╛рд╣ рджреА рдЧрдИ рдереА рдХрд┐ рдЬреАрд╕реАрдПрдо рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдЦрддрд░рдирд╛рдХ рдХреНрдпреЛрдВ рд╣реИред

рдкрд╣рд▓реЗ рдХреА рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ @sdrapkin рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ "рдмрд╛рдЗрдЯ-рд╕рд╛рдЗрдЬрд╝ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рд▓реАрдХ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред ... AEAD рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдЯ-рдЖрдХрд╛рд░ рдпрд╛ рдмреНрд▓реЙрдХ-рдЖрдХрд╛рд░ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рд╣реИрдВред"ред рд╕реАрд╕реАрдПрдо (рдФрд░ рдПрд╕рдЖрдИрд╡реА) рдХреЗ рд╕рд╛рде рд╕рдВрдпреБрдХреНрдд рд░реВрдк рд╕реЗ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдЯрд┐рдкреНрдкрдгреА рдПрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрдЬреАрдм рд╣реЛрдЧреА рдФрд░ рджреВрд╕рд░реА рдирд╣реАрдВ, рдпрд╣ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХреЗрд╡рд▓ рдПрдХ-рд╢реЙрдЯ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рд╣реЛрдиреЗ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЧрдП рд╣реИрдВ рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ

рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдкрд┐рдЫрд▓реЗ рдПрдкреАрдЖрдИ рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЧрдП рд╣реИрдВ (https://github.com/dotnet/corefx/issues/23629#issuecomment-329202845)ред рдЬрдм рддрдХ рдХрд┐ рдЕрдиреНрдп рдмрдХрд╛рдпрд╛ рдореБрджреНрджреЗ рди рд╣реЛрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рднреВрд▓рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред

рд╡рд╛рдкрд╕ рд╕реНрд╡рд╛рдЧрдд рд╣реИ @bartonjs

рдореИрдВ рдЬрд▓реНрдж рд╣реА рд╕реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБ рд▓реЗрдХрд┐рди рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ:

  1. рд╣рдордиреЗ рдЗрд╕ рдереНрд░реЗрдб рдкрд░ рдкрд╣рд▓реЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЛ рдЖрджрд┐рдо рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рд╣реИред рдореИрдВ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдЪреБрдиреЗ рд╣реБрдП рд╕рд┐рдлрд░рдЯреЗрдХреНрд╕реНрдЯ рд╣рдорд▓реЗ рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдбрд┐рдЬрд╛рдЗрди рдЪрд┐рдВрддрд╛ рд╣реИ, рди рдХрд┐ рдПрдХ рдЖрджрд┐рдо рдЪрд┐рдВрддрд╛ред

  2. рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ AEAD рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо рдЧреЛрдкрдиреАрдпрддрд╛ рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рддреБрд░рдВрдд рдЕрдВрддрд┐рдо рдмрд╛рдЗрдЯ рдкрд░ рдЧреЛрдкрдиреАрдпрддрд╛ + рдкреНрд░рд╛рдорд╛рдгрд┐рдХрддрд╛ рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рддрд╛ рд╣реИред AEAD (рдпрд╛рдиреА рдХреЗрд╡рд▓ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдЧреЛрдкрдиреАрдпрддрд╛) рдкрд░ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╕рдорд░реНрдерди рдХреЗ рдмрд┐рдирд╛, рдЖрдк рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдПрдХ рдирд┐рдореНрди, рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЗрд╡рд▓ рдЖрд╢реНрд╡рд╛рд╕рди рддрдХ рд╕реАрдорд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдпрджрд┐ рддрдХрдиреАрдХреА рдЧреБрдг рдЕрдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВ рдпрд╛ рдЖрдк (рд╕рд╣реА) рдореЗрд░реЗ рддрд░реНрдХреЛрдВ рдХреА рдкреНрд░рд╛рдорд╛рдгрд┐рдХрддрд╛ рдкрд░ рд╕рдВрджреЗрд╣ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдмрд╛рд╣рд░реА рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдорд╛рд░реНрдЧ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред рдЖрдкрдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЖрдкрдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдореЛрдб рдореЗрдВ AEAD (AES GCM рд╕рд╣рд┐рдд) рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рд╡рд┐рдВрдбреЛрдЬ рдХреЛрд░ рдУрдПрд╕ ( bcrypt ) BCryptEncrypt рдпрд╛ BCryptDecrypt рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ GCM рдХреЛ рд╕реНрдЯреНрд░реАрдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╡рд╣рд╛рдВ dwFlags рджреЗрдЦреЗрдВред рдпрд╛ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг ред рдпрд╛ рдПрдХ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдиреЗ рд╕реАрдПрд▓рдЖрд░ рд░реИрдкрд░ рд▓рд┐рдЦрд╛ рд╣реИред рдпрд╛ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди NIST FIP-140-2 рдХреЛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрд╕ рд╡рд░реНрд╖ рдХреА рд╢реБрд░реБрдЖрдд рдХреА рддрд░рд╣ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╛ рдХрд┐ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдФрд░ рдПрдирдЖрдИрдПрд╕рдЯреА рджреЛрдиреЛрдВ рдиреЗ рдПрдИрдПрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЖрд╕рдкрд╛рд╕ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрд╕рд╛рдзрди рдЦрд░реНрдЪ рдХрд┐рдП рдФрд░ рдЗрд╕реЗ рдпрд╣рд╛рдВ рдФрд░ рдпрд╣рд╛рдВ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд┐рдпрд╛ред рдФрд░ рдЗрди рд╕рдмрдХреЗ рдмрд╛рд╡рдЬреВрдж, рдХрд┐рд╕реА рдиреЗ рднреА рдЖрджрд┐рдореЛрдВ рдХреЛ рджреЛрд╖ рдирд╣реАрдВ рджрд┐рдпрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ рдХрд┐ .NET рдХреЛрд░ рдЕрдЪрд╛рдирдХ рдЪрд╛рд░реЛрдВ рдУрд░ рдЖ рдЬрд╛рдП рдФрд░ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдЦреБрдж рдХреА рдХреНрд░рд┐рдкреНрдЯреЛ-рдереАрд╕рд┐рд╕ рд▓рд╛рдЧреВ рдХрд░реЗред рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдФрд░ рд╡рди-рд╢реЙрдЯ рджреЛрдиреЛрдВ рдХрд╛ рдПрдХ рд╕рд╛рде рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд╣реБрдд рдорд╛рдореВрд▓реА рд░реВрдк рд╕реЗред

рдЕрдзрд┐рдХ? рдЦреИрд░, рдКрдкрд░ рдпрд╣ рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рдХреЗ рд▓рд┐рдП рд╕рдЪ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЙрдирдХреЗ 'рдирдП' рдИрд╡реАрдкреА рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рднреАред

рдФрд░ рдпрд╣ рдмрд╛рдЙрдВрд╕реАрдХреИрд╕рд▓ рдХреЗ рд▓рд┐рдП рд╕рдЪ рд╣реИред

рдФрд░ рдпрд╣ рдЬрд╛рд╡рд╛ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд╕рд╛рде рд╕рдЪ рд╣реИред

рдЪреАрдпрд░реНрд╕!
рд╕рд┐рдб

@sidshetye ++10 рдЕрдЧрд░ рдХреНрд░рд┐рдкреНрдЯреЛрдмреЛрд░реНрдб рдЗрддрдирд╛ рдЪрд┐рдВрддрд┐рдд рд╣реИ рддреЛ рд╡реЗ рд╡рд┐рдВрдбреЛрдЬрд╝ рд╕реАрдПрдирдЬреА рдХреЛ рдРрд╕рд╛ рдХреНрдпреЛрдВ рдХрд░рдиреЗ рджреЗрддреЗ рд╣реИрдВ?

рдпрджрд┐ рдЖрдк Microsoft рдХреЗ NIST FIPS-140-2 AES рд╕рддреНрдпрд╛рдкрди (рдЙрджрд╛. # 4064 ) рдХреА рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░ рдзреНрдпрд╛рди рджреЗрдВрдЧреЗ:

рдПрдИрдПрд╕-рдЬреАрд╕реАрдПрдо:

  • рд╕рд╛рджрд╛ рдкрд╛рда рд▓рдВрдмрд╛рдИ: 0, 8, 1016, 1024
  • рдПрдПрдбреА рдХреА рд▓рдВрдмрд╛рдИ: 0, 8, 1016, 1024

рдПрдИрдПрд╕-рд╕реАрд╕реАрдПрдо:

  • рд╕рд╛рджрд╛ рдкрд╛рда рд▓рдВрдмрд╛рдИ: 0-32
  • рдПрдПрдбреА рд▓рдВрдмрд╛рдИ: 0-65536

рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рддреНрдпрд╛рдкрди рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдпрд╣ рднреА рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдирдЖрдИрдПрд╕рдЯреА рдЙрд╕ рдкреВрд░реНрд╡ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред AES-GCM рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ 64Gb рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд▓реЗрдирдЯреЗрдХреНрд╕реНрдЯ (GCM рдХреА рдПрдХ рдФрд░ рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рд╕реАрдорд╛) рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рд╢рд╛рджреА рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧ 16k рд╕реЗ рдЕрдзрд┐рдХ рдХреА рд╕рд╡рд╛рд░реА рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЦрдВрдбрд┐рдд рдмрдлрд░ рдЕрдЪреНрдЫреЗ рд╣реЛрдВрдЧреЗ рдФрд░ рдЗрд╕рдореЗрдВ рдХреЛрдИ рдЬреЛрдЦрд┐рдо рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд╕реАрдПрдирдЬреА рдиреЗ рдЗрд╕рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдмрдирд╛рдпрд╛ рд╣реИ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдпрд╣ рдЙрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рд╣реИ) ... рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореИрдВ рдХрдИ рд╕реНрдкреИрди рдпрд╛ рд╕рдорд╛рди (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХреНрдб рд╕реВрдЪреА) рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдпрджрд┐ рдпрд╣ рдПрдХ рд╕рдиреНрдирд┐рд╣рд┐рдд рдмрдлрд░ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рддрд╛ рд╣реИ рддреЛ рдпрд╣ рдареАрдХ рд╣реИред

рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╕реНрдЯрд╛рдЗрд▓" рдПрдкреАрдЖрдИ рдкрд░ рдЫрд╛рдпрд╛рджрд╛рд░ рдХреНрд░рд┐рдкреНрдЯреЛ рдмреЛрд░реНрдб рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЕрднреА рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ, рддреЛ рдЪрд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ рдПрдХ рд╢реЙрдЯ рдПрдкреАрдЖрдИ рдмрдирд╛рддреЗ рд╣реИрдВред рдПрдХ рдПрдкреАрдЖрдИ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреА рдЧреБрдВрдЬрд╛рдЗрд╢ рд╣рдореЗрд╢рд╛ рд╣реЛрддреА рд╣реИ рдпрджрд┐ рдкрд░реНрдпрд╛рдкреНрдд рд▓реЛрдЧ рдмрд╛рдж рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ

@sdrapkin рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдПрдкреАрдЖрдИ рд╣реИ рдЬреЛ рдПрдирдЖрдИрдПрд╕рдЯреА рд▓реИрдмреНрд╕ рдФрд░ рдПрдордПрд╕рдПрдлрдЯреА рджреНрд╡рд╛рд░рд╛ рд╡реНрдпрд╛рдкрдХ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛ рдЧрдпрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рд▓реНрдб рдХреЛ рдорд╛рдиреНрдп рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ $80,000 - $50,000 рдХреЗ рдмреАрдЪ рдФрд░ MSFT (рдФрд░ OpenSSL рдФрд░ Oracle рдФрд░ рдЕрдиреНрдп рдХреНрд░рд┐рдкреНрдЯреЛ рд╣реИрд╡реАрд╡реЗрдЯ) рдиреЗ рдЗрди рдПрдкреАрдЖрдИ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ 10 рд╕реЗ рдЕрдзрд┐рдХ рд╡рд░реНрд╖реЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рдХрд░рдиреЗ рдореЗрдВ рднрд╛рд░реА рдирд┐рд╡реЗрд╢ рдХрд┐рдпрд╛ рд╣реИред рдЖрдЗрдП рдкрд░реАрдХреНрд╖рдг рдпреЛрдЬрдирд╛ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд╛рджреЗ-рдкрд╛рда рдЖрдХрд╛рд░реЛрдВ рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рди рд╣реЛрдВ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ .NET рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдпрд╛ рдПрдХ-рд╢реЙрдЯ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ 0, 8, 1016, 1024 рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдЖрдХрд╛рд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдЧрд╛ред рдореБрджреНрджрд╛ рдЙрди рд╕рднреА рдпреБрджреНрдз-рдкрд░реАрдХреНрд╖рдгрд┐рдд рдПрдкреАрдЖрдИ (рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ; рд╣рдерд┐рдпрд╛рд░ рд╕рдорд░реНрдерди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдкрд░) рд╣реИ, рдЗрди рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдХреНрд░рд┐рдкреНрдЯреЛ-рдЖрджрд┐рдо рдПрдкреАрдЖрдИ рд╕реНрддрд░ рдкрд░ рдПрдИрдПрдбреА рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рдЕрдм рддрдХ рдХрд╛ рд╣рд░ рддрд░реНрдХ рдХреНрд░рд┐рдкреНрдЯреЛ-рдЖрджрд┐рдо рд╕реНрддрд░ рдкрд░ рдЫрджреНрдо-рдЪрд┐рдВрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрджреНрдзреГрдд рдПрдХ рдЖрд╡реЗрджрди рдпрд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реНрддрд░ рдХреА рдЪрд┐рдВрддрд╛ рд░рд╣рд╛ рд╣реИред

рдореИрдВ рд╕рднреА 'рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рд╡рд┐рдЪрд╛рд░ рдЬреАрддрдиреЗ' рдХреЗ рд▓рд┐рдП рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЬрдм рддрдХ .net рдХреЛрд░ рдХреНрд░рд┐рдкреНрдЯреЛ рдЯреАрдо (рдПрдордПрд╕рдПрдлрдЯреА рдпрд╛ рд╕рдореБрджрд╛рдп) рдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЦреЛрдЬ рдирд╣реАрдВ рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рд░ рдХреЛрдИ рдХреНрд░рд┐рдкреНрдЯреЛ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд╕рднреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрдЧрдардиреЛрдВ рд╕реЗ рдЧрд▓рдд рд╣реИрдВ рдФрд░ рд╡реЗ рд╕рд╣реА рд╣реИрдВред

рдкреБрдирд╢реНрдЪ: рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдпрд╣рд╛рдВ рдЕрд╕рд╣рдорддрд┐ рдореЗрдВ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╣рдо рд╕рднреА рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдордВрдЪ рдФрд░ рдЙрд╕рдХреЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХреНрдпрд╛ рд╣реИред

@Drawaes рдЬрдм рддрдХ AEAD рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди) рдЖрдЬ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдПрдкреАрдЖрдИ рд╕рддрд╣ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдореИрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рд▓реЛрдЧ рджреЛ рдЗрдВрдЯрд░рдлреЗрд╕ рдпрд╛ рдХрд╕реНрдЯрдо рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕реЗ рдХреИрд╕реЗ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдЖрдкрджрд╛ рд╣реЛрдЧреАред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдЪрд░реНрдЪрд╛ рдПрдХ рдРрд╕реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддреА рд╣реИ рдЬреЛ рднрд╡рд┐рд╖реНрдп рдХрд╛ рдкреНрд░рдорд╛рдг рд╣реИ (рдпрд╛ рдмрд╣реБрдд рдХрдо, рдЕрдиреНрдп рдПрдИрдПрдбреА рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рджрд░реНрдкрдг рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрдИ рд╕рд╛рд▓реЛрдВ рд╕реЗ рдЖрд╕рдкрд╛рд╕ рд░рд╣реЗ рд╣реИрдВ!)ред

рдореИрдВ рд╕рд╣рдордд рд╣реЛрдиреЗ рдХреА рдкреНрд░рд╡реГрддреНрддрд┐ рд░рдЦрддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдореБрджреНрджрд╛ рдХрд╣реАрдВ рддреЗрдЬреА рд╕реЗ рдирд╣реАрдВ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЬрдм рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рддреЛ рд╣рдо рдПрдХ рд╕рдВрдХрдЯ рдмрд┐рдВрджреБ рдкрд░ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд░рдЦрддреЗ рд╣реИрдВ рдпрд╛ рддреЛ рдпрд╣ рдЗрд╕реЗ 2.1 рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдмрдирд╛ рдкрд╛рдПрдЧрд╛ рдпрд╛ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдордп рдирд╣реАрдВ рдмрдЪреЗрдЧрд╛ред рдореИрдВ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдХрд╣реВрдБрдЧрд╛ рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рдкреБрд░рд╛рдиреЗ рд░реИрдкрд░реНрд╕ рдкрд░ рд╡рд╛рдкрд╕ рдЪрд▓рд╛ рдЧрдпрд╛ рд╣реВрдБ рдФрд░ 2.0 рдХреЗ рд▓рд┐рдП рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдирдпрд╛ рд░реВрдк рджреЗ рд░рд╣рд╛ рд╣реВрдБ;)

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬрд╛рд╡рд╛ , рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рдпрд╛ рд╕реА # рдмрд╛рдЙрдВрд╕реА рдХреИрд╕рд▓ рдпрд╛ рд╕реАрдПрд▓рдЖрд░ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдВрджрд░реНрдн рдПрдкреАрдЖрдИ рд╣реИрдВред рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдХрд░реЗрдЧрд╛ рдФрд░ рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ, рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╕реА # рдореЗрдВ рдЬрд╛рд╡рд╛ рдХреЗ 'рдЬрд╛рд╡рд╛ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░' рдЬреИрд╕рд╛ рдХреБрдЫ рд╣реЛ, рдЬрд╣рд╛рдВ рд╕рднреА рдХреНрд░рд┐рдкреНрдЯреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╣реЛрдВ, рдЬрд┐рд╕рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдХреНрд░рд┐рдкреНрдЯреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд╕реНрд╡реИрдк рдХрд░рдиреЗ рдХреА рдЗрдЬрд╛рдЬрдд рдорд┐рд▓рддреА рд╣реИред

рдпрд╣рд╛рдБ рд╡рд╛рдкрд╕, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рд╣рдо .NET рдХреЛрд░ рдХреЗ ICryptoTransform рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ:

public interface IAuthenticatedCryptoTransform : ICryptoTransform 
{
    bool CanChainBlocks { get; }
    byte[] GetTag();
    void SetExpectedTag(byte[] tag);
}

рдпрджрд┐ рд╣рдо Span рд╕рднреА byte[] s рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╕рдордЧреНрд░ рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд▓рд┐рдП System.Security.Cryptography рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рд╕рдВрдкреВрд░реНрдг API рдХреЛ рдкрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдлрд┐рдХреНрд╕реНрдб рдЬреЗрд╕реАрдП рд▓рд┐рдВрдХ

рдпрджрд┐ рд╣рдо рд╕рднреА рдмрд╛рдЗрдЯ [] рдПрд╕ рдХреЛ рд╕реНрдкреИрдирд┐рдВрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕рдВрдкреВрд░реНрдг рдПрдкреАрдЖрдИ рдХреЛ рдкрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕реБрд░рдХреНрд╖рд╛ред рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдиреЗрдорд╕реНрдкреЗрд╕ рд╕рдордЧреНрд░ рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд▓рд┐рдПред

рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдРрд╕рд╛ рдХрд░ рд▓рд┐рдпрд╛ рдерд╛ред ICryptoTransform рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рдм рдХреБрдЫ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрдВрдЯрд░рдлреЗрд╕ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рд╣рдо .NET рдХреЛрд░ рдХреЗ ICryptoTransform рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ ...

рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдВрдд рдореЗрдВ рдЯреИрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдХреЙрд▓рд┐рдВрдЧ рдкреИрдЯрд░реНрди рдмрд╣реБрдд рдЕрдЬреАрдм рд╣реИ (рд╡рд┐рд╢реЗрд╖рдХрд░ рдпрджрд┐ рдХреНрд░рд┐рдкреНрдЯреЛрд╕реНрдЯреНрд░реАрдо рд╢рд╛рдорд┐рд▓ рд╣реИ)ред рдореИрдВрдиреЗ рдЗрд╕реЗ рдореВрд▓ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрд╛ рдерд╛, рдФрд░ рдпрд╣ рдмрджрд╕реВрд░рдд рдерд╛ред рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕рдХреА рднреА рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬреАрд╕реАрдПрдо рдкреИрд░рд╛рдореАрдЯрд░ рд╕реАрдмреАрд╕реА/рдИрд╕реАрдмреА рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗ рдЕрд▓рдЧ рд╣реИрдВред

рддреЛ, рдпрд╣рд╛рдБ рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВред

  • рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдПрдИ рдХреЗ рд▓рд┐рдП рдЦрддрд░рдирд╛рдХ рд╣реИред
  • рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВ "рдореБрдЭреЗ рдЖрджрд┐рдо рджреЗ рджреЛ, рдФрд░ рдореБрдЭреЗ рдЕрдкрдиреЗ рдЬреЛрдЦрд┐рдо рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рджреЛ" рдХрд╛ рдкреНрд░рд╢рдВрд╕рдХ рд╣реВрдВред
  • рдореИрдВ рднреА ".NET рдХрд╛ рдкреНрд░рд╢рдВрд╕рдХ рд╣реВрдВ (рдЖрд╕рд╛рдиреА рд╕реЗ) рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдЪреАрдЬреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдиреА рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрд╕рдХреЗ рдХреБрдЫ рдореВрд▓реНрдп рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИрдВ"
  • рдЕрдЧрд░, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдЧрд▓рдд рд╕рдордЭрд╛, GCM рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХреЛ рдмреБрд░реА рддрд░рд╣ рд╕реЗ рдХрд░рдиреЗ рдХреЗ рдЬреЛрдЦрд┐рдо рдЗрдирдкреБрдЯ рдХреБрдВрдЬреА рд░рд┐рдХрд╡рд░реА рдереЗ рддреЛ рдореИрдВ рдЕрднреА рднреА "рдпрд╣ рдмрд╣реБрдд рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ" рдкрд░ рд╣реЛрдЧрд╛ред (.NET рдФрд░ рдЕрдиреНрдп рд╕рднреА рдЪреАрдЬрд╝реЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ "рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧрдиреЗ рд╕реЗ рджреБрдирд┐рдпрд╛ рдиреЗ рдФрд░ рдЕрдзрд┐рдХ рд╕реАрдЦрд╛ рд╣реИ")
  • рд▓реЗрдХрд┐рди, рдЪреВрдВрдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рдЕрдЧрд░ рдЖрдк рд╡рд╛рдХрдИ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рдкрд╣рд┐рдпреЗ рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдВ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЙрд╕ рдзрд╛рд░рдгрд╛ рдХрд╛ рдордиреЛрд░рдВрдЬрди рдХрд░реВрдВрдЧрд╛ред

рдЙрд╕ рдЕрдВрдд рддрдХ рдореЗрд░реЗ рдХрд╛рдлреА рдХрдЪреНрдЪреЗ рд╡рд┐рдЪрд╛рд░ (рдореМрдЬреВрджрд╛ рд╕реБрдЭрд╛рд╡реЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛, рдЗрд╕рд▓рд┐рдП рдПрдХ-рд╢реЙрдЯ рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рд╛рд░ рдХреЗ рдмрдЬрд╛рдп рд╡рд░реНрдЪреБрдЕрд▓ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдореНрдкреНрд▓рд╛рдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ):

```рд╕реА#
рдЖрдВрд╢рд┐рдХ рд╡рд░реНрдЧ рдкреНрд░рдорд╛рдгреАрдХреГрддрдПрдиреНрдХреНрд░рд┐рдкреНрдЯрд░
{
// рдлреЗрдВрдХрддрд╛ рд╣реИ рдЕрдЧрд░ рдХреЛрдИ рдСрдкрд░реЗрд╢рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪрд▓ рд░рд╣рд╛ рд╣реИ
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рд╛рд░ рд╢реВрдиреНрдп рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ (рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП)рд╕рдВрдмрджреНрдз рдбреЗрдЯрд╛);
// рд╕рдлрд▓рддрд╛ рдкрд░ рд╕рдЪ, "рдЧрдВрддрд╡реНрдп рдмрд╣реБрдд рдЫреЛрдЯрд╛" рдкрд░ рдЭреВрдард╛, рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬ рдкрд░ рдЕрдкрд╡рд╛рджред
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рд╛рд░ рдмреВрд▓ TryEncrypt(ReadOnlySpanрдбреЗрдЯрд╛, рд╕реНрдкреИрдирдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдбрдбреЗрдЯрд╛, рдЗрдВрдЯ рдмрд╛рдЗрдЯреНрд╕ рд╕реЗ рдмрд╛рд╣рд░, рдЗрдВрдЯ рдмрд╛рдЗрдЯреНрд╕ рд╕реЗ рдмрд╛рд╣рд░);
// рдЕрд╕рддреНрдп рдпрджрд┐ рд╢реЗрд╖ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдбрдбреЗрдЯрд╛ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИ, рддреЛ рдлреЗрдВрдХрддрд╛ рд╣реИ рдпрджрд┐ рдЕрдиреНрдп рдЗрдирдкреБрдЯ рдмрд╣реБрдд рдЫреЛрдЯреЗ рд╣реИрдВ, рддреЛ NonceOrIVSizeInBits рдФрд░ TagSizeInBits рдЧреБрдг рджреЗрдЦреЗрдВред
// NonceOrIvUsed рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЗрд╕реЗ рдПрдХ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛рдпрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рд╛рд░ рдмреВрд▓ рдЯреНрд░рд╛рдИрдлрд┐рдирд┐рд╢ (рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП)рд╢реЗрд╖ рдбреЗрдЯрд╛, рд╕реНрдкреИрдирд╢реЗрд╖рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдбрдбреЗрдЯрд╛, рдЖрдЙрдЯ рдЗрдВрдЯ рдмрд╛рдЗрдЯреНрд╕рд▓рд┐рдЦрд┐рдд, рд╕реНрдкреИрдирдЯреИрдЧ, рд╕реНрдкреИрдиnonceOrIvUsed);
}

рдЖрдВрд╢рд┐рдХ рд╡рд░реНрдЧ рдкреНрд░рдорд╛рдгреАрдХреГрддрдбрд┐рдХреНрд░рд┐рдкреНрдЯрд░
{
// рдлреЗрдВрдХрддрд╛ рд╣реИ рдЕрдЧрд░ рдХреЛрдИ рдСрдкрд░реЗрд╢рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪрд▓ рд░рд╣рд╛ рд╣реИ
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рд╛рд░ рд╢реВрдиреНрдп рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ (рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП)рдЯреИрдЧ, ReadOnlySpannonceOrIv, ReadOnlySpanрд╕рдВрдмрджреНрдз рдбреЗрдЯрд╛);
// рд╕рдлрд▓рддрд╛ рдкрд░ рд╕рдЪ, "рдЧрдВрддрд╡реНрдп рдмрд╣реБрдд рдЫреЛрдЯрд╛" рдкрд░ рдЭреВрдард╛, рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬ рдкрд░ рдЕрдкрд╡рд╛рджред
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рд╛рд░ рдмреВрд▓ TryDecrypt(ReadOnlySpanрдбреЗрдЯрд╛, рд╕реНрдкреИрдирдбрд┐рдХреНрд░рд┐рдкреНрдЯреЗрдбрдбреЗрдЯрд╛, рдЖрдЙрдЯ рдЗрдВрдЯ рдмрд╛рдЗрдЯреНрд╕рд░реАрдб, рдЖрдЙрдЯ рдЗрдВрдЯ рдмрд╛рдЗрдЯреНрд╕рд░рд╛рдЗрдЯ);
// рдЦрд░рд╛рдм рдЯреИрдЧ рдкрд░ рдлреЗрдВрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реИрд╕реЗ рднреА рдбреЗрдЯрд╛ рд▓реАрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
// (рд╢реЗрд╖ рдбрд┐рдХреНрд░рд┐рдкреНрдЯреЗрдбрдбреЗрдЯрд╛ рд╕реАрдмреАрд╕реА + рдПрдЪрдПрдордПрд╕реА рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╢реЗрд╖ рдбреЗрдЯрд╛ рднреА рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ?)
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рд╛рд░ рдмреВрд▓ рдЯреНрд░рд╛рдИрдлрд┐рдирд┐рд╢ (рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП)рд╢реЗрд╖ рдбреЗрдЯрд╛, рд╕реНрдкреИрдирд╢реЗрд╖ рдбрд┐рдХреНрд░рд┐рдкреНрдЯреЗрдбрдбреЗрдЯрд╛, рдЗрдВрдЯ рдмрд╛рдЗрдЯреНрд╕ рд╕реЗ рдмрд╛рд╣рд░);
}
```

рдПрд╕реЛрд╕рд┐рдПрдЯреЗрдбрдбрд╛рдЯрд╛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдкрд░ рдЖрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬрд┐рди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╡реЗ рдЙрд╕ рдкрд░ рдкрдХрдбрд╝ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЬрд┐рди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдкрд╣рд▓реЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрдирдХреЗ рдкрд╛рд╕ рдЗрд╕рдХрд╛ рдХреЛрдИ рдЕрдиреНрдп рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдПрдХ рдмрд╛рд░ рдПрдХ рдЖрдХрд╛рд░ рддрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреИрд╕реА рджрд┐рдЦреЗрдЧреА (рдФрд░ рдХреНрдпрд╛ рд▓реЛрдЧреЛрдВ рдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ CCM рдХреЛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдмрдлрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рдлреЗрдВрдХ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрдм рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдореЛрдб рдореЗрдВ рд╣реЛ) рддреЛ рдореИрдВ рдмреЛрд░реНрдб рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдКрдВрдЧрд╛ред

@bartonjs рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ/рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рдорд░реВрдкрддрд╛ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░реАрдо рдХреЗ рдЕрдВрдд рд╕реЗ рдЯреИрдЧ рдХреЛ рдкреНрд▓рдХрд┐рдВрдЧ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рднреА рдмрджрддрд░ рдЕрдЧрд░ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПред рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдПрдордЖрдИрдЯреА рдХреЗ рддрд╣рдд рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ; рдореЗрд░реА рдЯреАрдо рдХреЗ рд╕рд╛рде рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА (рдореЗрд░реЗ рдбреЗрд╕реНрдХ/рдореЛрдмрд╛рдЗрд▓ рдкрд░ рдирд╣реАрдВ)

рдПрдХ рдмреАрдЪ рдХрд╛ рдореИрджрд╛рди рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рдпрд╛ рдПрдирдЯреА рдХреЗ рдмреАрдХреНрд░рд┐рдкреНрдЯ рдЬреИрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рдЕрдВрддрд┐рдо рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХреЙрд▓ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рдЯреИрдЧ рдХреЛ рдкреНрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрдм рдЯреИрдЧ рдХреА рддреБрд▓рдирд╛ рд╣реЛрддреА рд╣реИред рдпрд╛рдиреА рдПрдХ SetExpectedTag (рдЕрдВрддрд┐рдо рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдкрд╣рд▓реЗ) рдФрд░ GetTag (рдЕрдВрддрд┐рдо рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмрд╛рдж) рдХрд╛рдо рдХрд░реЗрдЧрд╛ рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЯреИрдЧ рдкреНрд░рдмрдВрдзрди рдХреЛ рдСрдлрд▓реЛрдб рдХрд░ рджреЗрдЧрд╛ред рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЗрд╡рд▓ рдЯреИрдЧ рдХреЛ рд╕рд┐рдлрд░рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдЕрд╕реНрдерд╛рдпреА рдХреНрд░рдо рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Initialize рдореЗрдВ рдЯреИрдЧ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рдирд╛ (рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ) рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рд╕рдорд░реВрдкрддрд╛ (рдмрд╛рдЗрдЯ рдкреНрд░рд╡рд╛рд╣) рдФрд░ рд╕рдордп (рдЕрдВрдд рдореЗрдВ рдЯреИрдЧ рдЬрд╛рдВрдЪ, рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ) рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЙрдкрд░реЛрдХреНрдд рдЯреИрдЧ рдПрдкреАрдЖрдИ рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддреЗ рд╣реИрдВред

рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рднреА, Initialize рдХреЛ рдХрд┐рд╕реА рднреА рдХреНрд░рд┐рдкреНрдЯреЛ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо рд╕реЗ рдкрд╣рд▓реЗ IV рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЕрдВрдд рдореЗрдВ, рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП, Initialize рдХреЛ рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдкрд╣рд▓реЗ рдПрдИрдПрд╕ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреБрдВрдЬреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред (рдореБрдЭреЗ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдЖрдк рдЙрд╕ рдмрд┐рдЯ рдХреЛ рдЯрд╛рдЗрдк рдХрд░рдирд╛ рднреВрд▓ рдЧрдП рд╣реИрдВ?)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдореЗрдВ рдЯреИрдЧ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рдирд╛ (рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ) рд╕рдорд░реВрдкрддрд╛ рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИ

CBC+HMAC рдореЗрдВ рдХрд┐рд╕реА рднреА рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ HMAC рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рдлрд╛рд░рд┐рд╢ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рдЯреИрдЧ-рдлрд░реНрд╕реНрдЯ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдердо рд╣реИред рдЗрд╕реА рддрд░рд╣, рдПрдХ "рд╢реБрджреНрдз рдПрдИ" рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЧрдгрдирд╛ рдХреЗ рджреМрд░рд╛рди рдЯреИрдЧ рдкрд░ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рд╕рдВрдЪрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдпрд╣ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдЕрдВрддрд┐рдо рдЙрддреНрддрд░ 0 рдерд╛ред рдЗрд╕рд▓рд┐рдП, рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рдорд╛рди рдХреА рддрд░рд╣, рдЪреВрдВрдХрд┐ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдкрд╣рд▓реЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдпрд╣ рд╣реИ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдПрдкреАрдЖрдИ рдореЗрдВ рдкрд╣рд▓реЗ рдЖрдиреЗ рдХреЗ рд▓рд┐рдПред

рдЙрдиреНрд╣реЗрдВ SetAssociatedData рдФрд░ SetTag рдореЗрдВ рдлрд╝реНрд▓реЛрдЯ рдХрд░рдирд╛ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдХрд┐ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдПрд▓реНрдЧреЛрд░рд┐рджрдо-рд╕реНрд╡рддрдВрддреНрд░ рд╣реЛрдиреЗ рдкрд░, рдЙрдкрдпреЛрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо-рдирд┐рд░реНрднрд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред AesGcm рдХреЛ AesCbcHmacSha256 рдпрд╛ SomeTagDesctructiveAlgorithm рдореЗрдВ рдмрджрд▓рдиреЗ рд╕реЗ рдЕрдм TryDecrypt рдереНрд░реЛ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЯреИрдЧ рдЕрднреА рддрдХ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдкреЙрд▓рд┐рдореЙрд░реНрдлрд┐рдХ рдирд╣реАрдВ рд╣реЛрдиреЗ рд╕реЗ рднреА рдмрджрддрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд▓рдЪреАрд▓реЗрдкрди рдХреА рдЕрдиреБрдорддрд┐ рдореЙрдбрд▓ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдкреНрд░рддрд┐ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реЛрдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреА рд╣реИред (рд╣рд╛рдВ, рдЗрд╕реЗ NeedsTagFirst рдЬреИрд╕реЗ рдЕрдзрд┐рдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкрд╣рдЪрд╛рди рд╡рд┐рд╢реЗрд╖рддрд╛ рдЧреБрдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛрддрд╛ рд╣реИ)

рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рднреА, рдХрд┐рд╕реА рднреА рдХреНрд░рд┐рдкреНрдЯреЛ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреЛ IV рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЕрдВрдд рдореЗрдВ, рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рд╛рд░рдВрдн рдХреЛ рдПрдИрдПрд╕ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреБрдВрдЬреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдХреБрдВрдЬреА рдПрдХ рд╡рд░реНрдЧ ctor рдкреИрд░рд╛рдореАрдЯрд░ рдерд╛ред IV/nonce ctor рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ IV/nonce рдкреНрд░рджрд╛рддрд╛ рд╕реЗ рдЖрддрд╛ рд╣реИред

рдкреНрд░рджрд╛рддрд╛ рдореЙрдбрд▓ SIV рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рджреМрд░рд╛рди рдХреЛрдИ IV рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рдбреЗрдЯрд╛ рдХреА рдУрд░ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛ SIV рдХреЗ рдкрд╛рд╕ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдПрдХ рдЦрд╛рд▓реА рдорд╛рди рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдпрд╛ рдЖрдк рдЙрд╕ рдмрд┐рдЯ рдХреЛ рдЯрд╛рдЗрдк рдХрд░рдирд╛ рднреВрд▓ рдЧрдП?

рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдореЗрд░реЗ рдореМрдЬреВрджрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдВрдЬреА рдФрд░ IV/рдЧреИрд░ рдкреНрд░рджрд╛рддрд╛ рд╕реАрдЯреАрдЖрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдерд╛ред

@bartonjs : рдЕрдЪреНрдЫреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдХреБрдЫ рдПрд▓реНрдЧреЛ рдкрд╣рд▓реЗ рдЯреИрдЧ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрдмрдХрд┐ рдЕрдиреНрдп рдЕрдВрдд рдореЗрдВ рдФрд░ рдЕрдиреБрд╕реНрдорд╛рд░рдХ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдХрд┐ рдпрд╣ рдореВрд▓ рдХрд▓реНрдкрдирд╛ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реИред рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рдХреНрд▓рд╛рдЙрдб-рдкрд╣рд▓рд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

рд╣рдо рднрдВрдбрд╛рд░рдг рдореЗрдВ рд░рдЦреА рдЧрдИ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ 10GB AES-GCM рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдлрд╝рд╛рдЗрд▓реЛрдВ (рдЕрд░реНрдерд╛рдд рд╕рд┐рдлрд░рдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рдмрд╛рдж рдЯреИрдЧ) рдкрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдПрдХ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдХрд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╕рдорд╡рд░реНрддреА рд░реВрдк рд╕реЗ рдХрдИ рдЗрдирдмрд╛рдЙрдВрдб рд╕реНрдЯреНрд░реАрдо рдХреЛ рдЕрд▓рдЧ рдорд╢реАрди/рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдВрддрд┐рдо рдмрд╛рдЗрдЯ + рдЯреИрдЧ рдЬрд╛рдВрдЪ рдХреЗ рдмрд╛рдж, рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛рд░реНрдпрднрд╛рд░ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рд╕рднреА рд╕реНрдЯреЛрд░реЗрдЬ, рд╡рд░реНрдХрд░, рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ VMs Azure US-West рдореЗрдВ рд╣реИрдВред

рдпрд╣рд╛рдВ, рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдЯреНрд░реАрдо рдХреЗ рдЕрдВрдд рдореЗрдВ рдЯреИрдЧ рд▓рд╛рдиреЗ рдФрд░ рдЙрд╕реЗ AuthenticatedDecryptor рдХреА Initialize рд╡рд┐рдзрд┐ рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ GCM рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реЗрдЪреНрдЫрд╛ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рднреА рд╡реЗ API рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдУ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдПрдкреАрдЖрдИ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдПрдИрдПрдбреА рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЕрдЧрд░ рд╡рд┐рднрд┐рдиреНрди рдПрдИрдПрдбреА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд▓рд┐рдП рдХреНрд░рд┐рдкреНрдЯреЛ рдкреНрд░рджрд╛рддрд╛ рдСрдЯреЛ-рдЬрд╛рджреБрдИ рд░реВрдк рд╕реЗ рдЯреИрдЧ рдХреЛ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВред рдЬрд╛рд╡рд╛ рдЬреАрд╕реАрдПрдо рдХреЗ рд▓рд┐рдП рд╕рд┐рдлрд░рдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЯреИрдЧ рд▓рдЧрд╛рдХрд░ рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХреЗ рдмрд┐рдирд╛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдЗрд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрдм рднреА рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдмрджрд▓рддрд╛ рд╣реИ (рдЬреИрд╕реЗ рд╕реАрдмреАрд╕реА-рдПрдЪрдПрдордПрд╕реА => рдЬреАрд╕реАрдПрдо) рддреЛ рдЙрдиреНрд╣реЗрдВ рдЯреИрдЧ-рдлрд░реНрд╕реНрдЯ рдФрд░ рдЯреИрдЧ-рд▓рд╛рд╕реНрдЯ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреА рдкрд░рд╕реНрдкрд░ рдЕрдирдиреНрдп рдкреНрд░рдХреГрддрд┐ рдХреЗ рдХрд╛рд░рдг рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЖрдИрдПрдордПрдЪрдУ, рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдпрд╣ рддрдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛

рд╡рд┐рдХрд▓реНрдк 1) рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкреНрд░рджрд╛рддрд╛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЯреИрдЧ рдкреНрд░рдмрдВрдзрди (рдЬреИрд╕реЗ рдЬрд╛рд╡рд╛) рдХреЛ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ

рдпрд╛

рд╡рд┐рдХрд▓реНрдк 2) рдПрдкреАрдЖрдИ рдкрд░ рдкрд░реНрдпрд╛рдкреНрдд рдПрдХреНрд╕рдкреЛрдЬ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдХрд░ рд╕рдХреЗрдВ (рдЬреИрд╕реЗ WinNT bcrypt рдпрд╛ openssl)

рд╡рд┐рдХрд▓реНрдк 1 рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЙрдкрднреЛрдХреНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдордЧреНрд░ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд░рд▓ рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдмрдлрд░ рдкреНрд░рдмрдВрдзрди рдЬрдЯрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╣рд▓ рдХрд░реЗрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЗрд╕реЗ рд╣рд░ рдмрд╛рд░ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред рд╕рд╛рде рд╣реА рд╕рднреА AEAD рдХреЛ рд╕рдорд╛рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рдЯреИрдЧ-рдкреНрд░рдердо, рдЯреИрдЧ-рдЕрдВрддрд┐рдо, рдЯреИрдЧ-рд░рд╣рд┐рдд) рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рд╕реНрд╡реИрдк рдХрд░рдирд╛ рднреА рд╕рд░рд▓ рд╣реИред

рдореЗрд░рд╛ рд╡реЛрдЯ рд╡рд┐рдХрд▓реНрдк 1 рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛ред

рдЕрдВрдд рдореЗрдВ, рд╣рдо GCM рдкрд░ ICryptoTransform рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдХрд░ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЦреЛрджрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗ рддрд╛рдХрд┐ рдЯреИрдЧ рдЗрди-рд╕реНрдЯреНрд░реАрдо рд╕реНрд░реЛрдд рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдпрд╣ рд╕реАрдПрд▓рдЖрд░ рд╕рд┐рдХреНрдпреЛрд░рд┐рдЯреА рдХреЗ рдЕрдкрдиреЗ рд░реИрдкрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдкрдбреЗрдЯ рдерд╛ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдмрдлрд░ рдкреНрд░рддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдпрд╣ рдЕрднреА рднреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреЗрдЬрд╝ рд╣реИ (рд╡рд┐рдВрдбреЛрдЬ 10 рдмреВрдЯрдХреИрдВрдк рдореЗрдВ рд╣рдорд╛рд░реЗ рдЯреЗрд╕реНрдЯ рдореИрдХрдмреБрдХ рдкреНрд░реЛ рдкрд░ ~ 4 тАЛтАЛрдЬреАрдмреА/рд╕реЗрдХрдВрдб)ред рд╣рдордиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк 1 рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдПрд▓рдЖрд░ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд▓рдкреЗрдЯрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЗрд╕реЗ рд╣рд░ рдЬрдЧрд╣ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рджреГрд╢реНрдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ ICryptoTransform рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ TransformBlock рдФрд░ TransformFinalBlock рдХреЗ рднреАрддрд░ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред

@sidshetye рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдХреНрд▓рд╛рдЙрдб-рдкрд╣рд▓рд╛ рдЙрджрд╛рд╣рд░рдг рдХреНрдпреЛрдВ рдЕрд╡рд░реБрджреНрдз рд╣реИред рдпрджрд┐ рдЖрдк рд╕реНрдЯреЛрд░реЗрдЬ рд╕реЗ рдкрдврд╝ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдЖрдк рдкрд╣рд▓реЗ рдЕрдВрддрд┐рдо рдХреБрдЫ рдЯреИрдЧ рдмрд╛рдЗрдЯреНрд╕ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрдЯрд░ рд╕реАрдЯреАрдЖрд░ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ Azure рд╕рдВрдЧреНрд░рд╣рдг API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдпрд╣ CloudBlockBlob.DownloadRangeXxx рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

@GrabYourPitchforks рдЙрд╕ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡рд┐рдЪрд▓рд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ Azure Blob Storage рдХреА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрд╖рдорддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, VM рдЖрдзрд╛рд░рд┐рдд рд╕рдВрдЧреНрд░рд╣рдг (IaaS) рдпрд╛ рдЧреИрд░-Azure рд╕рдВрдЧреНрд░рд╣рдг рд╡рд░реНрдХрд▓реЛрдб рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрдЯреНрд░реАрдо рдорд┐рд▓рддреА рд╣реИ рдЬреЛ рдЦреЛрдЬрдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

рдореИрдВ, рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, @GrabYourPitchforks рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрддреНрд╕рд╛рд╣рд┐рдд рд╣реВрдВ - рдпрд╛рдп!

рд╣рдо рднрдВрдбрд╛рд░рдг рдореЗрдВ рд░рдЦреА рдЧрдИ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ 10GB AES-GCM рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдлрд╝рд╛рдЗрд▓реЛрдВ (рдЕрд░реНрдерд╛рдд рд╕рд┐рдлрд░рдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рдмрд╛рдж рдЯреИрдЧ) рдкрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдПрдХ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдХрд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╕рдорд╡рд░реНрддреА рд░реВрдк рд╕реЗ рдХрдИ рдЗрдирдмрд╛рдЙрдВрдб рд╕реНрдЯреНрд░реАрдо рдХреЛ рдЕрд▓рдЧ рдорд╢реАрди/рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдВрддрд┐рдо рдмрд╛рдЗрдЯ + рдЯреИрдЧ рдЬрд╛рдВрдЪ рдХреЗ рдмрд╛рдж, рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛рд░реНрдпрднрд╛рд░ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рд╕рднреА рд╕реНрдЯреЛрд░реЗрдЬ, рд╡рд░реНрдХрд░, рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ VMs Azure US-West рдореЗрдВ рд╣реИрдВред

@sidshetye , рдЖрдк рдЧреВрдВрдЧрд╛-рдПрди-рдЦрддрд░рдирд╛рдХ рдЖрджрд┐рдо рдФрд░ рд╕реНрдорд╛рд░реНрдЯ-рдПрди-рд╣рдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдЕрд▓рдЧ рд░рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдЕрдбрд┐рдЧ рдереЗ! рдореЗрд░рд╛ рдПрдХ рд╕рдкрдирд╛ рдерд╛ - рдФрд░ рдореИрдВрдиреЗ рдЙрд╕ рдкрд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд┐рдпрд╛ред рдФрд░ рдлрд┐рд░ рдЖрдк рдЗрд╕реЗ рд╣рдо рдкрд░ рдлреЗрдВрдХ рджреЗрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИ - рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдбрд┐рдЬрд╝рд╛рдЗрдиред рдЬрд┐рд╕рдиреЗ рднреА рдЙрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЖрдкрдиреЗ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ - рдЧрдбрд╝рдмрдбрд╝ рд╣реИред рдЪреМрдХреЛрд░ рдЦреВрдВрдЯреА рдХреЛ рдЧреЛрд▓ рдЫреЗрдж рдореЗрдВ рдлрд┐рдЯ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдерддрд╛ рдкрд░ рд░реЛрдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред

рдЬреЛ рдХреЛрдИ рднреА рдЬреАрд╕реАрдПрдо-рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб 10 рдЬреАрдмреА рдлрд╛рдЗрд▓реЗрдВ рди рдХреЗрд╡рд▓ рдЦрддрд░рдирд╛рдХ рд░реВрдк рд╕реЗ рдЖрджрд┐рдо рдХрд┐рдирд╛рд░реЗ рдХреЗ рдХрд░реАрдм рд░рд╣ рд░рд╣рд╛ рд╣реИ (рдЬреАрд╕реАрдПрдо 64 рдЬреАрдмреА рдХреЗ рдмрд╛рдж рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ), рдмрд▓реНрдХрд┐ рдпрд╣ рднреА рдПрдХ рдирд┐рд╣рд┐рдд рджрд╛рд╡рд╛ рдерд╛ рдХрд┐ рдкреВрд░реЗ рд╕рд┐рдлрд░рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдмрдлрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдЬреЛ рдХреЛрдИ рднреА GCM- 10Gb рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ рдЕрддреНрдпрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЧрд▓рддреА рдХрд░ рд░рд╣рд╛ рд╣реИред рд╕рдорд╛рдзрд╛рди: рдЦрдВрдбрд┐рдд рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рдиред рдЯреАрдПрд▓рдПрд╕ рдореЗрдВ рдЪрд░-рд▓рдВрдмрд╛рдИ 16k-рд╕реАрдорд┐рдд рдЪрдВрдХрд┐рдВрдЧ рд╣реИ, рдФрд░ рдЕрдиреНрдп, рд╕рд░рд▓, рдкреАрдХреЗрдЖрдИ-рдореБрдХреНрдд рд╕реНрд╡рд╛рдж рд╣реИрдВред рдЗрд╕ рдХрд╛рд▓реНрдкрдирд┐рдХ рдЙрджрд╛рд╣рд░рдг рдХреА "рдХреНрд▓рд╛рдЙрдб-рдлрд░реНрд╕реНрдЯ" рд╕реЗрдХреНрд╕ рдЕрдкреАрд▓ рдбрд┐рдЬрд╛рдЗрди рдХреА рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рдХрдо рдирд╣реАрдВ рдХрд░рддреА рд╣реИред

(рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рдзрд╛рдЧреЗ рдкрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рд╣реИред)

@sdrapkin рдиреЗ рдбреЗрдЯрд╛ рд╕реБрд░рдХреНрд╖рд╛ рдкрд░рдд рд╕реЗ IAuthenticatedEncryptor рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдмрд┐рдВрджреБ рдЙрдард╛рдпрд╛ред рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдЖрджрд┐рдо рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдЕрдореВрд░реНрддрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдбреЗрдЯрд╛ рд╕реБрд░рдХреНрд╖рд╛ рдкрд░рдд рдЗрд╕ рдмрд╛рдд рдкрд░ рдХрд╛рдлреА рд╡рд┐рдЪрд╛рд░ рдХрд░рддреА рд╣реИ рдХрд┐ рдпрд╣ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ IV рдпрд╛ рдЧреИрд░ рдХреЗ рд╕реНрд╡-рдЪрдпрди рдХреЛ рдордирд╛ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЕрдиреБрд░реВрдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди AAD рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рд╕рдордЭрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдПрдХ рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рд╣рдж рддрдХ рдорд╛рд▓рд┐рдХрд╛рдирд╛ рд╣реИред рдПрдИрдПрд╕-рдЬреАрд╕реАрдПрдо рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, IAuthenticatedEncryptor.Encrypt рд╕реЗ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдЙрдкрдХреБрдВрдЬреА рд╡реНрдпреБрддреНрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдЕрдЬреАрдм рд▓рдЧрднрдЧ-рдЧреИрд░-рдЪреАрдЬ рдХрд╛ рд╕рдВрдпреЛрдЬрди рд╣реИ, рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд╕рд╛рджреЗ рдЯреЗрдХреНрд╕реНрдЯ рдкрд░ рдПрдИрдПрд╕-рдЬреАрд╕реАрдПрдо рдЪрд▓рд╛рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕рд┐рдлрд░рдЯреЗрдХреНрд╕реНрдЯ (рд▓реЗрдХрд┐рди рдирд╣реАрдВ рдПрдПрдбреА!), рдФрд░ рдПрдИрдПрд╕-рдЬреАрд╕реАрдПрдо рдЯреИрдЧред рдЗрд╕рд▓рд┐рдП рдЬрдмрдХрд┐ рд╕рдВрд░рдХреНрд╖рд┐рдд рдкреЗрд▓реЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, рдкреЗрд▓реЛрдб рд╕реНрд╡рдпрдВ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрд╡реАрдХреГрдд рд╕рдореНрдореЗрд▓рди рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рд╕реБрд░рдХреНрд╖рд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдЕрд▓рдЧ рдХреЛрдИ рднреА рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдкрд░рд┐рдгрд╛рдореА рд╕рд┐рдлрд░рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдРрдк рдбреЗрд╡рд▓рдкрд░-рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрдореНрдореАрджрд╡рд╛рд░ рдмрдирд╛рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рднрдпрд╛рдирдХ рдЙрдореНрдореАрджрд╡рд╛рд░ рдХреЛ рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореБрдЭреЗ рдпрд╣ рднреА рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдореБрдЭреЗ рд╡рди рдЯреНрд░реВ рдЗрдВрдЯрд░рдлреЗрд╕ (рдЯреАрдПрдо) IAuthenticatedEncryptionAlgorithm рд╣реЛрдиреЗ рдореЗрдВ рдХрд╛рдлреА рдореВрд▓реНрдп рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдкреНрд░рдорд╛рдгрд┐рдд рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВред рдпреЗ рдЖрджрд┐рдо "рдЬрдЯрд┐рд▓" рд╣реИрдВ, рд╕рд╛рдзрд╛рд░рдг рдмреНрд▓реЙрдХ рд╕рд┐рдлрд░ рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡ рдпрд╛ рд╣реИрд╢рд┐рдВрдЧ рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡ рдХреЗ рд╡рд┐рдкрд░реАрддред рдЗрди рдЬрдЯрд┐рд▓ рдЖрджрд┐рдореЛрдВ рдореЗрдВ рдмрд╕ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЪрд░ рд╣реИрдВред рдХреНрдпрд╛ рдЖрджрд┐рдо AE рд╣реА рд╣реИ, рдпрд╛ рдпрд╣ AEAD рд╣реИ? рдХреНрдпрд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдПрдХ IV / рдЧреИрд░ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ? (рдореИрдВрдиреЗ рдХреБрдЫ рдРрд╕реЗ рджреЗрдЦреЗ рд╣реИрдВ рдЬреЛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред) рдХреНрдпрд╛ рдХреЛрдИ рдЪрд┐рдВрддрд╛ рд╣реИ рдХрд┐ рдЗрдирдкреБрдЯ IV / рдиреЙрди рдпрд╛ рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╕реЗ рд╕рдВрд░рдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдЖрдИрдПрдордУ рдЬрдЯрд┐рд▓ рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡реНрд╕ рдХреЛ рдХреЗрд╡рд▓ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдПрдкреАрдЖрдИ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЙрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЬрдЯрд┐рд▓ рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡реНрд╕ рдХреЗ рд╕рдорд░реНрдерди рдореЗрдВ рд╕реЗрдВрдХрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рдирдХреА рд╡реЗ рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВред рдлрд┐рд░ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЕрдкрдиреЗ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдХрд┐рд╕реА рднреА рд╕рдорд╛рди рдПрдкреАрдЖрдИ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИред

@sdrapkin рд╣рдо рдлрд┐рд░ рд╕реЗ рд╡рд┐рд╖рдп рд╕реЗ рд╣рдЯ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣рд╛рдВ рдХреНрд░рд┐рдкреНрдЯреЛ рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡ рдирдВрдЧреЗ рдФрд░ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИрдВред рдЬрдмрдХрд┐ рд╕рд┐рд╕реНрдЯрдо/рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд░рдд рдмрдлрд░рд┐рдВрдЧ рдХреЛ рд╕рдВрднрд╛рд▓рддреА рд╣реИ; рд╡рд╣ рднреА рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рд╕реНрддрд░ рдкрд░, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореБрдЦреНрдп рд╕рд┐рд╕реНрдЯрдо рдореЗрдореЛрд░реА рдореЗрдВ рдирд╣реАрдВ рдЬреЛ рдХрд┐ рд╡рди рд╢реЙрдЯ рдкреНрд░рд┐рдорд┐рдЯрд┐рд╡реНрд╕ рдХреЛ рдордЬрдмреВрд░ рдХрд░реЗрдЧрд╛ред 'рдЪрдВрдХрд┐рдВрдЧ' рд╕реАрдорд╛ X (X=10GB рдпрд╣рд╛рдБ) рд╣реИ рдХреНрдпреЛрдВрдХрд┐ <64GB, рдХреНрдпреЛрдВрдХрд┐ рдХреНрд▓рд╕реНрдЯрд░ рдХреА рдмрдлрд░рд┐рдВрдЧ рдХреНрд╖рдорддрд╛ рд▓рдЧрднрдЧ рдЕрд╕реАрдорд┐рдд рдереА рдФрд░ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдЕрдВрддрд┐рдо рдмрд╛рдЗрдЯ рд▓реЛрдб рд╣реЛрдиреЗ рддрдХ рдХреБрдЫ рднреА рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рдерд╛ред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд┐рдВрддрд╛рдУрдВ рдХрд╛ рдЕрд▓рдЧрд╛рд╡ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдкрд░рдд рдХреЛ рдЗрд╕рдХреА рддрд╛рдХрдд рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡ рдЙрдЪреНрдЪ рдкрд░рдд рдбрд┐рдЬрд╝рд╛рдЗрди/рд╕реАрдорд╛рдУрдВ рдХреЛ рдмрд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЕрдзрд┐рдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдРрдкреНрд╕ рдЕрдкрдиреА рд╡рд┐рд░рд╛рд╕рдд рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЖрддреЗ рд╣реИрдВ)ред

NIST 800-38d sec9.1 рдХрд╣рддрд╛ рд╣реИ:

рдХрд┐рд╕реА рдЕрдирдзрд┐рдХреГрдд рдкрд╛рд░реНрдЯреА рдХреЛ IVs рдХреА рдкреАрдврд╝реА рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдпрд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП,
GCM рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд╝рд┐рдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рднреАрддрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ
FIPS рдкрдмред 140-2. рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореЙрдбреНрдпреВрд▓ рдХреА рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд╝рд┐рдХ рд╕реАрдорд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП a
"рдЬреЗрдирд░реЗрд╢рди рдпреВрдирд┐рдЯ" рдЬреЛ рд╕реЗрдХ рдореЗрдВ рдПрдХ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░ IVs рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддреА рд╣реИред 8.2 рдКрдкрд░ред
FIPS 140-2 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд╡рд┐рд░реБрджреНрдз рдЗрд╕рдХреЗ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
рд╡рд░реНрдгрди рдХрд░реЗрдВ рдХрд┐ рдореЙрдбреНрдпреВрд▓ IVs рдкрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рдЕрдиреБрдкрд╛рд▓рди рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИред

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ GCM IVs рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕реНрд╡рддрдГ рдЙрддреНрдкрдиреНрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдФрд░ рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред

@sdrapkin рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБ рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдФрд░ рднреА рдХрд░реАрдм рд╕реЗ рдкрдврд╝рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ 96 рдмрд┐рдЯреНрд╕ рдФрд░ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рдХреА IV рд▓рдВрдмрд╛рдИ рдХреЗ рд▓рд┐рдП, рдЦрдВрдб 8.2.2 рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмрд┐рдЯ рдЬрдирд░реЗрдЯрд░ (RBG) рдХреЗ рд╕рд╛рде IV рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдХрдо рд╕реЗ рдХрдо 96 рдмрд┐рдЯреНрд╕ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╣реИрдВ (рдЖрдк рд╕рд┐рд░реНрдл 0 рдЕрдиреНрдп рдмрд┐рдЯреНрд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рдорд╣реАрдиреЗ рдЗрд╕ рдзрд╛рдЧреЗ рдкрд░ рд╣реА рдЗрд╕рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд┐рдпрд╛ рдерд╛ ( рдпрд╣рд╛рдВ рдиреЙрди рдХреЗ рддрд╣рдд)ред

рдПрд▓рдЯреА; рдбреАрдЖрд░: INonce рдПрдХ рдЬрд╛рд▓ рд╣реИ рдЬреЛ рдПрдирдЖрдИрдПрд╕рдЯреА рдФрд░ рдПрдлрдЖрдИрдкреАрдПрд╕ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЕрдиреБрдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдзрд╛рд░рд╛ 9.1 рдХрд╛ рд╕реАрдзрд╛ рд╕рд╛ рдЕрд░реНрде рд╣реИ, FIPS 140-2 рдХреЗ рд▓рд┐рдП, IV рдкреАрдврд╝реА рдЗрдХрд╛рдИ (рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдпрд╛рдиреА рдЦрдВрдб 8.2.2 рдпрд╛ рдирд┐рдпрддрд╛рддреНрдордХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпрд╛рдиреА рдЦрдВрдб 8.2.1) рдХреЛ FIPS рдорд╛рдиреНрдп рдореЙрдбреНрдпреВрд▓ рд╕реАрдорд╛ рдХреЗ рднреАрддрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рддрдм рд╕реЗ ...

  1. RBG рдкрд╣рд▓реЗ рд╕реЗ рд╣реА FIPS рдорд╛рдиреНрдп рд╣реИрдВ
  2. IV рд▓реЗрдВрд╕>= 96 рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╣реИ
  3. рдПрдХ IV рдкреАрдврд╝реА рдХреА рдЗрдХрд╛рдИ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдирд╛ рдЬреЛ рд░рд┐рдмреВрдЯ рдХреЛ рдЬрд╛рд░реА рд░рдЦреЗ, рдХреНрд░рд┐рдкреНрдЯреЛ рдЖрджрд┐рдо рдкрд░рдд рдореЗрдВ рдмрд┐рдЬрд▓реА рдХреА рдЕрдирд┐рд╢реНрдЪрд┐рддрдХрд╛рд▓реАрди рд╣рд╛рдирд┐ рдХрдард┐рди рд╣реИ
  4. рдХреНрд░рд┐рдкреНрдЯреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рднреАрддрд░ 3 рд╕реЗ рдКрдкрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдФрд░ рдЗрд╕реЗ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдирд╛ рдХрдард┐рди рдФрд░ рдорд╣рдВрдЧрд╛ рд╣реИ (рдЧреИрд░-рдмрд┐рдЯ-рд╕рдЯреАрдХ рдмрд┐рд▓реНрдб рдЗрдореЗрдЬ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП $ 50K)
  5. рдХреЛрдИ рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдХрднреА рднреА 3 рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдФрд░ рдЙрдкрд░реЛрдХреНрдд 4 рдХреЗ рдХрд╛рд░рдг рдЗрд╕реЗ рдкреНрд░рдорд╛рдгрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред (рдХреБрдЫ рд╡рд┐рджреЗрд╢реА рд╕реИрдиреНрдп/рд╕рд░рдХрд╛рд░реА рдкреНрд░рддрд┐рд╖реНрдард╛рдиреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ)ред

... рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреНрд░рд┐рдкреНрдЯреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА (Oracle's Java, WinNT's bcryptprimitives, OpenSSL рдЖрджрд┐ рджреЗрдЦреЗрдВ) рдЬреЛ FIPS рдкреНрд░рдорд╛рдгрди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, IV рдХреЗ рд▓рд┐рдП RBG рд░реВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдмрд╕ рдПрдХ рдмрд╛рдЗрдЯ рдРрд░реЗ рд▓реЗрддреЗ рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ INonce рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╣реЛрдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ NIST рдФрд░ FIPS рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдПрдХ рдЬрд╛рд▓ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЙрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдХреНрд░рд┐рдкреНрдЯреЛ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди INonce рдХреЗ рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рд▓рдЧрднрдЧ рдЧрд╛рд░рдВрдЯреА рд╣реИ рдХрд┐ рд╡рд╣ 9 рдорд╣реАрдиреЗ + рдФрд░ $50K+ NIST рдкреНрд░рдорд╛рдгрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдирд╣реАрдВ рдЧреБрдЬрд░рд╛ рд╣реИред рдлрд┐рд░ рднреА, рдЕрдЧрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЖрд░рдЬреАрдмреА рдирд┐рд░реНрдорд╛рдг (рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреНрд░рд┐рдкреНрдЯреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдмрд╛рдЗрдЯ рд╕рд░рдгреА рднреЗрдЬреА рдереА, рддреЛ рд╡реЗ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдкрд╛рд▓рди рдХрд░реЗрдВрдЧреЗред

рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рд╣реИ - рдЗрди рдореМрдЬреВрджрд╛ рдХреНрд░рд┐рдкреНрдЯреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдиреЗ рдЕрдкрдиреА рдПрдкреАрдЖрдИ рд╕рддрд╣ рд╡рд┐рдХрд╕рд┐рдд рдХреА рд╣реИ рдФрд░ рдХрдИ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдпреБрджреНрдз рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рд╣рдордиреЗ рдЗрд╕ рд▓рдВрдмреЗ рд╕реВрддреНрд░ рдореЗрдВ рдЬрд┐рд╕ рдкрд░ рдмрд╛рдд рдХреА рд╣реИред рдореЗрд░рд╛ рд╡реЛрдЯ рдлрд┐рд░ рд╕реЗ рдЙрди рд╕рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ, рдЙрди рд╕рднреА рдорд╛рдиреНрдпрддрд╛рдУрдВ рдФрд░ рдЙрди рд╕рднреА рдкреНрд░рддрд┐рд╖реНрдард╛рдиреЛрдВ рдореЗрдВ рдЙрд╕ рдЬреНрдЮрд╛рди рдФрд░ рдЕрдиреБрднрд╡ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рди рдХрд┐ рдкрд╣рд┐рдпрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдкрд╣рд┐рдпрд╛ рдХрд╛ рдкреБрди: рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рди рдХрд░реЗрдВред рд░реЙрдХреЗрдЯ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ :)

рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВ,

рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ? @karelz рдХреЗ рдХреНрд░рд┐рдкреНрдЯреЛ рд░реЛрдбрдореИрдк рдереНрд░реЗрдб рдпрд╛ рдПрдИрдПрд╕ рдЬреАрд╕реАрдПрдо рдереНрд░реЗрдб рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рджреЗрдЦрд╛ред

рдзрдиреНрдпрд╡рд╛рдж
рд╕рд┐рдб

рддреЛ рдЕрдВрддрд┐рдо рдареЛрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ https://github.com/dotnet/corefx/issues/23629#issuecomment -334328439 рд╕реЗ рд╣реИ:

partial class AuthenticatedEncryptor
{
    // throws if an operation is already in progress
    public abstract void Initialize(ReadOnlySpan<byte> associatedData);
    // true on success, false on тАЬdestination too smallтАЭ, exception on anything else.
    public abstract bool TryEncrypt(ReadOnlySpan<byte> data, Span<byte> encryptedData, out int bytesRead, out int bytesWritten);
    // false if remainingEncryptedData is too small, throws if other inputs are too small, see NonceOrIVSizeInBits and TagSizeInBits properties.
    // NonceOrIvUsed could move to Initialize, but then it might be interpreted as an input.
    public abstract bool TryFinish(ReadOnlySpan<byte> remainingData, Span<byte> remainingEncryptedData, out int bytesWritten, Span<byte> tag, Span<byte> nonceOrIvUsed);
}

partial class AuthenticatedDecryptor 
{
    // throws if an operation is already in progress
    public abstract void Initialize(ReadOnlySpan<byte> tag, ReadOnlySpan<byte> nonceOrIv, ReadOnlySpan<byte> associatedData);
    // true on success, false on тАЬdestination too smallтАЭ, exception on anything else.
    public abstract bool TryDecrypt(ReadOnlySpan<byte> data, Span<byte> decryptedData, out int bytesRead, out int bytesWritten);
    // throws on bad tag, but might leak the data anyways.
    // (remainingDecryptedData is required for CBC+HMAC, and so may as well add remainingData, I guess?)
    public abstract bool TryFinish(ReadOnlySpan<byte> remainingData, Span<byte> remainingDecryptedData, out int bytesWritten);
}

рддрдм рд╕реЗ рдХреЗрд╡рд▓ рдХреБрдЫ рд╕рдВрднрд╛рд╡рд┐рдд рдореБрджреНрджреЛрдВ рдХреЛ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

  • рдЯреИрдЧ рдХреА рдЕрдЧреНрд░рд┐рдо рд░реВрдк рд╕реЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдХреБрдЫ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдмрд╛рдзрд╛ рдбрд╛рд▓рддрд╛ рд╣реИред рдпрд╛ рддреЛ рдПрдкреАрдЖрдИ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реЗрдкрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ (рдЕрд░реНрдерд╛рдд рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп) рд╕рдорд╕реНрдпрд╛ рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
  • INonceProvider рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдЬрдЯрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░/рдпрд╛ рдПрдирдЖрдИрдПрд╕рдЯреА рдФрд░ рдПрдлрдЖрдИрдкреАрдПрд╕ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЕрдиреБрдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
  • рдкреНрд░рдорд╛рдгреАрдХреГрдд рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡реНрд╕ рдХрд╛ рдЗрдЪреНрдЫрд┐рдд рдЕрдореВрд░реНрдд рдПрдХ рдкрд╛рдЗрдк рд╕рдкрдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдорддрднреЗрдж рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╕реБрдЭрд╛рд╡ рдкрд░ рдЖрдЧреЗ рдХреЛрдИ рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рд╣реБрдИ рд╣реИред

рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:

  1. рдЯреИрдЧ рдЕрдкрдлреНрд░рдВрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреА рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрдЯрд┐рд▓рддрд╛ рдЧрдВрднреАрд░ рд▓рдЧрддреА рд╣реИ, рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд╕реНрдпрд╛ рдкрд░рд┐рджреГрд╢реНрдп рдЕрд╕рд╛рдорд╛рдиреНрдп рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рд╕рдорд╕реНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдорд╛рдорд▓реЗ рдХреА рддрд░рд╣ рд▓рдЧрддреА рд╣реИред рдЕрдЪреНрдЫрд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдмрд╣реБрдд рдХреБрдЫ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ рдирд╣реАрдВред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдВ рдЗрд╕реЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд░ рдЫреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рд╣рдЬ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВред (рдордЬрдмреВрдд рдкреНрд░рддрд┐рд░реВрдкреЛрдВ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред)
  2. рдЪрд░реНрдЪрд╛ рд▓рдЧрд╛рддрд╛рд░ рдПрдХ рд▓рдЪреАрд▓реЗ, рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдУрд░ рдмрдврд╝реА рд╣реИ рдЬреЛ IV рдкреАрдврд╝реА рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рджреБрд░реБрдкрдпреЛрдЧ рд╕реЗ рд░рдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЪрд▓реЛ рд╕реБрд╕рдВрдЧрдд рд░рд╣реЗрдВред рдЖрдо рд╕рд╣рдорддрд┐ рдпрд╣ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ рдХрд┐ рдПрдХ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдПрдкреАрдЖрдИ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдЧрд▓рд╛ рдХрджрдо рд╣реИ, рдЬреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдЪрд┐рдд рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ - рдЗрд╕ рддрд░рд╣ рд╣рдо рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдПрдкреАрдЖрдИ рдореЗрдВ рджреБрд░реБрдкрдпреЛрдЧ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕реБрд░рдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбрд░ рдХреА рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЦреБрд░рд╛рдХ рдиреЗ IV рдкреАрдврд╝реА рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рджреБрд░реБрдкрдпреЛрдЧ рдХреА рд░реЛрдХрдерд╛рдо рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдХрд╛рдпрдо рд░рдЦрд╛ рд╣реИред рдирд┐рдореНрди-рд╕реНрддрд░реАрдп API рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдФрд░ рд╕реБрд╕рдВрдЧрдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ byte[] -рд╕рдорддреБрд▓реНрдп рдХреА рдУрд░ рдЭреБрдХрддрд╛ рд╣реВрдБред рд▓реЗрдХрд┐рди рдЗрдВрдЬреЗрдХреНрд╢рди INonceProvider рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реНрд╡реИрдкрд┐рдВрдЧ рдЕрдзрд┐рдХ рдирд┐рд░реНрдмрд╛рдз рд╣реИред рдХреНрдпрд╛ @sidshetye рдХреА рдЯрд┐рдкреНрдкрдгреА рдЕрдХрд╛рдЯреНрдп рд╣реИ, рдпрд╛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг INonceProvider рдЗрдореНрдкреНрд▓рд╛рдВрдЯреЗрд╢рди рдЬреЛ рдХреЗрд╡рд▓ RNG рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЙрд╕реЗ рдЕрднреА рднреА рдЖрдЬреНрдЮрд╛рдХрд╛рд░реА рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
  3. рдЕрдореВрд░реНрдд рдЙрдкрдпреЛрдЧреА рдкреНрд░рддреАрдд рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдореЗрдВ рдЗрддрдирд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХрд┐ рдЕрдм рддрдХ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдиреБрдХрд╕рд╛рди рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдЕрдЪреНрдЫрд╛ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдПрдкреАрдЖрдИ рдЕрднреА рднреА рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдПрдкреАрдЖрдИ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрд╢рди рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реИрдВред
  4. IV рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрдж рд╣реИ, рдФрд░ рдПрдХ рдЧреИрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХрд╛ IV рд╣реИ, рд╕рд╣реА рд╣реИ? рдпрд╣ INonceProvider рд╕реЗ IIVProvider , рдФрд░ nonceOrIv* рд╕реЗ iv* рдХреЗ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреА рдорд╛рдВрдЧ рдХрд░рддрд╛ рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рд╣рдо рд╣рдореЗрд╢рд╛ рдПрдХ IV рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдПрдХ рдиреЙрди рдХреЗ рд╕рд╛рдеред

рдЯреИрдЧ рдЕрдкрдлреНрд░рдВрдЯ рдореЗрд░реЗ рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреИрд░ рд╕реНрдЯрд╛рд░реНрдЯрд░ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╢рд╛рдпрдж рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд░рдЦреВрдВрдЧрд╛ред рдЬреЛ рдареАрдХ рд╣реИ, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╣рд╛рдИ рдкрд░рдл рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣рд░ рдХрд┐рд╕реА рдХреЗ рдмрд╕ рдХреА рдмрд╛рдд рд╣реИред

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╡рд┐рд▓рдВрдмрддрд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдиреЗрдЧрд╛ред рдлреНрд░реЗрдо рдХреЛ рдбрд┐рдХреЛрдб рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрдд рдореЗрдВ рдЯреИрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рд╕рдВрдкреВрд░реНрдг рд╕рдВрджреЗрд╢ рдкреВрд░реНрд╡ рдмрдлрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдореВрд▓ рд░реВрдк рд╕реЗ IO рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдХреЛ рдУрд╡рд░рд▓реИрдк рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдВрдд рдореЗрдВ рдЗрд╕реЗ рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдЗрддрдирд╛ рдХрдард┐рди рдХреНрдпреЛрдВ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реЛрдб рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рдпрд╣ рдореЗрд░реЗ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд╣реЛрдЧреАред

IV рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрдж рд╣реИ, рдФрд░ рдПрдХ рдЧреИрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХрд╛ IV рд╣реИ, рд╕рд╣реА рд╣реИ?

рдирд╣реАрдВ, рдПрдХ nonce рдПрдХ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рдВрдЦреНрдпрд╛ рд╣реИред рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЬреЛ рдПрдХ рдЧреИрд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреБрди: рдЙрдкрдпреЛрдЧ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдЧрд╛рд░рдВрдЯреА рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИред GCM рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рд╣реА рдХреБрдВрдЬреА рдФрд░ рдПрдХ рдЕрд▓рдЧ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдЧреИрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ GHASH рдХреБрдВрдЬреА рдХрд╛ рд╕рдордЭреМрддрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, GCM рдХреЛ CTR рддрдХ рдХрдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред

http://nvlpubs.nist.gov/nistpubs/ir/2013/NIST.IR.7298r2.pdf рд╕реЗ :

Nonce: рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдорд╛рди рдЬреЛ рдПрдХ рд╣реА рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдХрднреА рднреА рджреЛрд╣рд░рд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪреБрдиреМрддреА-рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рдЪреБрдиреМрддрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЧреИрд░ рдХреЛ рдЖрдо рддреМрд░ рдкрд░ рддрдм рддрдХ рджреЛрд╣рд░рд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рддрдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреБрдВрдЬреА рдирд╣реАрдВ рдмрджрд▓реА рдЬрд╛рддреАред рдЕрдиреНрдпрдерд╛, рд░реАрдкреНрд▓реЗ рд╣рдорд▓реЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдПрдХ рдЪреБрдиреМрддреА рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЧреИрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЪреБрдиреМрддреА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдЧреИрд░ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдирд╣реАрдВ рд╣реИред

рдПрдХ "IV" рдореЗрдВ рд╕рдорд╛рди рдХрдареЛрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реАрдмреАрд╕реА рдХреЗ рд╕рд╛рде рдПрдХ IV рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рд╕реЗ рдХреЗрд╡рд▓ рд▓реАрдХ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд╕рдВрджреЗрд╢ рд╕рдорд╛рди IV рдХреЗ рд╕рд╛рде рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рдорд╛рди рд╣реИ, рдпрд╛ рдЙрд╕рд╕реЗ рднрд┐рдиреНрди рд╣реИред рдпрд╣ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдХрдордЬреЛрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдПрдХ рдЧреИрд░ рдПрдХ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рдВрдЦреНрдпрд╛ рд╣реИред
рдПрдХ "IV" рдореЗрдВ рд╕рдорд╛рди рдХрдареЛрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред

@bartonjs рд╣рд╛рдБред рдореИрдВ рддрд░реНрдХ рджреВрдВрдЧрд╛ рдХрд┐, рдЪреВрдВрдХрд┐ рдХреНрд░рд┐рдкреНрдЯреЛ рдЖрджрд┐рдо рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреИрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдЗрд╕рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡реЗрдХреНрдЯрд░ рд╣реИред рдпрд╣ IV рдХреА рдХрд┐рд╕реА рднреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдорд┐рд▓ рд╕рдХрддреА рд╣реИред рдЗрд╕рдХреА рдЕрдзрд┐рдХ рдХрдареЛрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╣реИрдВ, рд╣рд╛рдВ, рдЬреИрд╕реЗ рдЧрд╛рдп рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╢реБ рд╣реЛрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдХрдареЛрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рд╢рдмреНрдж "cowOrAnimal" рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рдВрдЧ рд░рд╣реЗ рд╣реИрдВред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдореЗрдВ IV рдХреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ, рдЗрд╕ рддрдереНрдп рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╕рднреА IV рдХреЗ рдХрд┐рд╕реА рди рдХрд┐рд╕реА рд░реВрдк рдХреА рдорд╛рдВрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЕрдЧрд░ рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ, рддреЛ рд╣рд░ рддрд░рд╣ рд╕реЗ рд╡рд░реНрддрдорд╛рди рд╢рдмреНрджреЛрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦреЗрдВ, рд▓реЗрдХрд┐рди рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ, рдХреЗрд╡рд▓ "iv" рдпрд╛ "IIVProvider" рд╕рд░рд▓ рдФрд░ рд╕рд╣реА рджреЛрдиреЛрдВ рд╣реИрдВред

nonceOrIv рдмрд╛рдЗрдХ рд╢реЗрдбрд┐рдВрдЧ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП:

96 рдмрд┐рдЯ GCM IV рдХреЛ рдХрднреА-рдХрднреА 4-рдмрд╛рдЗрдЯ salt рдФрд░ 8-рдмрд╛рдЗрдЯ nonce (рдЙрджрд╛. RFC 5288) рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред RFC 4106 GCM nonce рдХреЛ 4-рдмрд╛рдЗрдЯ salt рдФрд░ 8-рдмрд╛рдЗрдЯ iv $ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред RFC 5084 (CMS рдореЗрдВ GCM) рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ CCM рдПрдХ nonce рд▓реЗрддрд╛ рд╣реИ, GCM рдПрдХ iv рд▓реЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди _"... AES-CCM рдФрд░ AES-GCM рдХреЗ рд▓рд┐рдП рд╢рд░реНрддреЛрдВ рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕реЗрдЯ рд╣реИред , AES-GCM IV рдХреЛ рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд╢реЗрд╖ рднрд╛рдЧ рдореЗрдВ рдПрдХ рдЧреИрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред"_ RFC 5647 (SSH рдХреЗ рд▓рд┐рдП GCM) рдХрд╣рддрд╛ рд╣реИ _"рдиреЛрдЯ: [RFC5116] рдореЗрдВ, IV рдХреЛ рдЧреИрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред"_ RFC 4543 ( IPSec рдореЗрдВ GCM) рдХрд╣рддрд╛ рд╣реИ _ "рд╣рдо AES-GMAC IV рдЗрдирдкреБрдЯ рдХреЛ рдиреЙрди рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдЗрд╕реЗ рдкреИрдХреЗрдЯ рдореЗрдВ IV рдлрд╝реАрд▓реНрдб рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред"_ RFC 7714 (SRTP рдХреЗ рд▓рд┐рдП GCM) 12-рдмрд╛рдЗрдЯ IV рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддрд╛ рд╣реИ

рдЕрдзрд┐рдХрд╛рдВрд╢ GCM рд╕реНрдкреЗрдХреНрд╕ рдореЗрдВ рдПрдХрд░реВрдкрддрд╛ рдХреА рдкреВрд░реНрдг рдХрдореА рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, nonceOrIv рдереЛрдбрд╝реЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред $0.02

рдЯреИрдЧ рдЕрдкрдлреНрд░рдВрдЯ рдПрдХ рдиреЙрди-рд╕реНрдЯрд╛рд░реНрдЯрд░ рд╣реИ

рдЕрдиреНрдп рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рддрд░рд╣ рдпрд╣рд╛рдВ рдЦреБрдж рдХреЛ рдЖрд╡рд╛рдЬ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЯреИрдЧ рдЕрдкрдлреНрд░рдВрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рднреА рдПрдХ рдЧреИрд░-рд╢реБрд░реБрдЖрдд рд╣реИред рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИ .NET рдЗрд╕ рдХреГрддреНрд░рд┐рдо рд░реВрдк рд╕реЗ рд╢реБрд░реВ рдХреА рдЧрдИ рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде рд╕рдорд╡рд░реНрддреА рдзрд╛рд░рд╛рдУрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА рдХреЛ рдорд╛рд░рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рджрд╛рд╡реЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЬрдЯрд┐рд▓рддрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ? рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреБрдЪреНрдЫ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рд╛рде рд╣реА рдХрд┐рд╕реА рднреА рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрд░рд┐рдкреНрдЯреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рдЬрд┐рд╕реЗ рдЖрдк рд▓рдкреЗрдЯреЗрдВрдЧреЗ) рдореЗрдВ рдпрд╣ рд╕реАрдорд╛ рдирд╣реАрдВ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЧрдгрдирд╛ рдХрд┐рдП рдЧрдП рдЯреИрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЗрдирдкреБрдЯ рдЯреИрдЧ рдХреЛ рдХреЗрд╡рд▓ рд╕реНрдерд┐рд░-рд╕рдордп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдкрд░рд┐рдХрд▓рд┐рдд рдЯреИрдЧ TryFinish рдХреЗ рджреМрд░рд╛рди рдЕрдВрддрд┐рдо рдмреНрд▓реЙрдХ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдЙрдкрд▓рдмреНрдз рд╣реЛрддрд╛ рд╣реИред рддреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рдЬрдм рдЖрдк рдЕрдкрдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рдЖрдк рдХреЗрд╡рд▓ tag рдХреЛ рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЕрдВрджрд░ TryFinish рддрдХ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЖрдк рдЗрд╕реЗ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

public abstract bool TryFinish(ReadOnlySpan<byte> remainingData, 
                             Span<byte> remainingDecryptedData, 
                             out int bytesWritten, 
                             ReadOnlySpan<byte> tag = null); // <==

рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рднреА рдХреНрд░рд┐рдкреНрдЯреЛ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдХрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдард┐рди рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ рднреА рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдЗрдВрдЯрд░рдлреЗрд╕ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХрднреА рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдпрд╛ рдорд╛рдкрдиреАрдпрддрд╛ рдХреА рдХреАрдордд рдкрд░ рдирд╣реАрдВ - рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рднрд╛рд╖рд╛ рдХреА рдорд╛рдирдХ рдХреНрд░рд╛рдпреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬреИрд╕реА рдореВрд▓рднреВрдд рдкрд░рдд рдкрд░ред рдЖрдИрдПрдордПрдЪрдУ, рдЕрдЧрд░ рдХреЛрдИ рдЦреБрдж рдХреЛ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реБрдП рдкрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдЖрдорддреМрд░ рдкрд░ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЕрдореВрд░реНрддрди рджреЛрд╖рдкреВрд░реНрдг рд╣реИред

рдпрджрд┐ рдПрдХ рд╕рд░рд▓ рд╕реБрд╕рдВрдЧрдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЬрд╛рд╡рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрддрд╛ рд╣реВрдВ - рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рдпрд╣рд╛рдВ рд╡рд┐рдХрд▓реНрдк 1 рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рдерд╛ ред рдпрд╣ рдЯреИрдЧ рдкрд╣рд▓реЗ/рдЯреИрдЧ рдХреЗ рдЙрдкрд░реЛрдХреНрдд рдореБрджреНрджреЗ рдХреЛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рдЖрдИрдПрдордПрдЪрдУ, рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП) рдХреЗ рднреАрддрд░ рд░рдЦрдХрд░ рднреА рджреВрд░ рдХрд░ рджреЗрддрд╛ рд╣реИред рдореЗрд░реА рдЯреАрдо рдЗрд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░ рд░рд╣реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╣рдорд╛рд░рд╛ рдирд┐рд░реНрдгрдп рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдореЗрдВ рдХреЛрдИ рдирд┐рд░реНрдгрдп рд▓реЗрдирд╛ рд╣реИ рдФрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИ - рддреЛ рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдорд╛рд░реНрдЧ рдкрд░ рдЬрд╛рдПрдВрдЧреЗред

рдХреГрдкрдпрд╛ INonce рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдмрдЪреЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг byte[] рдпрд╛ span<> рдПрдХ рдЖрдЬреНрдЮрд╛рдХрд╛рд░реА рдирд┐рдореНрди рд╕реНрддрд░ рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

IV рдмрдирд╛рдо рдиреЙрди - рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдорд╛рдорд▓рд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ IV рд╣реИред GCM рдХреЗ рд▓рд┐рдП IV рдХреЛ рдПрдХ рдиреЙрди (рдЬреИрд╕реЗ рдХрд╛рд░ рдмрдирд╛рдо RedOrCar) рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВрдиреЗ рдЕрднреА рджреЗрдЦрд╛ рд╣реИ рдХрд┐ @timovzl рдиреЗ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рдорд╛рди рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ :)

@sidshetye рдХреНрдпрд╛ рдЖрдк рдПрдХ рд╕рдЯреАрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рджреЛрдиреЛрдВ (1) рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЯреИрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ (2) рдЕрдиреНрдп рд╕рднреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдХреЗрд╡рд▓ TryFinish рддрдХ рдЯреИрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджрд┐рд╢рд╛ рдореЗрдВ рдХреБрдЫ рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ?

  • Initialize рдореЗрдВ рдЯреИрдЧ рдХреЛ рд╢реВрдиреНрдп рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рдХреЗрд╡рд▓ рд╡реЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЬрд┐рдиреНрд╣реЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╡реЗ рд╢реВрдиреНрдп рдкрд░ рдлреЗрдВрдХ рджреЗрдВрдЧреЗред
  • TryFinish рдореЗрдВ рдЯреИрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╛ (рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ) рдЙрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд▓рд┐рдП рд╢реВрдиреНрдп рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдХреЗрд╡рд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд░реВрдк рдореЗрдВ рдЬрдЯрд┐рд▓рддрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдПрдХ рдЫреЛрдЯрд╛ рдмрд▓рд┐рджрд╛рди рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реИрд╕реЗ рднреА рдкрд░реНрдпрд╛рдкреНрдд рджрд╕реНрддрд╛рд╡реЗрдЬ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдореИрдВ рдЖрд╢реНрд╡рд╕реНрдд рд╣реЛрдирд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдПред

@timovzl рдЬрд╝рд░реВрд░, рдореБрдЭреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд▓ рдХреБрдЫ рд╕рдордп рдмрдЬрдЯ рдХреА рдЙрдореНрдореАрдж рд╣реИред

@Timovzl , рдореЗрд░реЗ рдкрд╛рд╕ рдЖрдЬ рд╣реА рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рдФрд░ рдпрд╣ рдХрд╛рдлреА рдЦрд░рдЧреЛрд╢ рдХрд╛ рдЫреЗрдж рдмрди рдЧрдпрд╛! рдпрд╣ рд▓рдВрдмрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рддрд╛ рд╣реИ, .NET рдХреНрд░рд┐рдкреНрдЯреЛ рдХреА рддрд╛рдХрдд ( ICryptoTransform ) рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рддрд╛ рд╣реИ рдЬрдмрдХрд┐ .NET рдХреЛрд░/рд╕реНрдЯреИрдВрдбрд░реНрдб рджрд┐рд╢рд╛ ( Span<> ) рдХреЛ рдЧрд▓реЗ рд▓рдЧрд╛рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдиреАрдЪреЗ рдХреЛрдИ рдЯрд╛рдЗрдкреЛ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреЗ рд╕рдВрдЪрд╛рд░ (рдЪреИрдЯ, рдХреЙрдиреНрдл рдХреЙрд▓ рдЖрджрд┐) рддреЗрдЬреА рд╕реЗ рд╡рд┐рдЪрд╛рд░-рдордВрдерди рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ; рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЙрдбрд▓

рдореИрдВ рдкрд╣рд▓реЗ рдПрдкреАрдЖрдИ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдореА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЙрдбрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред

рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ

var aesGcm = new AesGcm();
using (var encryptor = aesGcm.CreateAuthenticatedEncryptor(Key, IV, AAD))
{
  using (var cryptoOutStream = new CryptoStream(cipherOutStream, encryptor, CryptoStreamMode.Write))
  {
    clearInStream.CopyTo(cryptoOutStream);
  }
}

рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ

var aesGcm = new AesGcm();
using (var decryptor = aesGcm.CreateAuthenticatedDecryptor(Key, IV, AAD))
{
  using (var decryptStream = new CryptoStream(cipherInStream, encryptor, CryptoStreamMode.Write))
  {
    decryptStream.CopyTo(clearOutStream);
  }
}

рдЧреИрд░ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ

рдЪреВрдВрдХрд┐ рдЧреИрд░-рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реИ, рд╣рдо рдПрдХ рд╕рд░рд▓ рдПрдкреАрдЖрдИ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдХреЛ AuthenticatedSymmetricAlgorithm (рдиреАрдЪреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд) рдкрд░ рд╕рд╣рд╛рдпрдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд▓рдкреЗрдЯ рд╕рдХрддреЗ рд╣реИрдВред рдЕрд░реНрдерд╛рдд

public class AesGcm : AuthenticatedSymmetricAlgorithm
{
  ...
  // These return only after consuming entire input buffer

  // Code like Streaming Encrypt from above within here
тАЛ  public abstract bool TryEncrypt(ReadOnlySpan<byte> clearData, Span<byte> encryptedData);

  // Code like Streaming Decrypt from above within here
  public abstract bool TryDecrypt(ReadOnlySpan<byte> encryptedData, Span<byte> clearData); 
  ...
}

рдпрд╣ рдПрдХ рд╕рд░рд▓ рдПрдкреАрдЖрдИ рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рджреЛрдЧреБрдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ

рдЧреИрд░-рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ

var aesGcm = new AesGcm(Key, IV, AAD);
aesGcm.TryEncrypt(clearData, encryptedData);
var tag = aesGcm.Tag;

рдЧреИрд░-рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ

var aesGcm = new AesGcm(Key, IV, AAD);
aesGcm.Tag = tag;
aesGcm.TryDecrypt(encryptedData, clearData);

рд╣реБрдб рдХреЗ рдиреАрдЪреЗ

рдХреЛрд░рдПрдлрдПрдХреНрд╕ рд╕реНрд░реЛрдд рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╕реНрдкреИрди<> рд╣рд░ рдЬрдЧрд╣ рд╣реИред рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ System.Security.Cryptography.* - рд╕рд┐рдореЗрдЯреНрд░рд┐рдХ рд╕рд┐рдлрд░ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рддреЛ рдЪрд▓рд┐рдП рдЙрд╕ рдкрд╣рд▓реЗ рдФрд░ рд▓реЗрдпрд░ рдСрдереЗрдВрдЯрд┐рдХреЗрдЯреЗрдб рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЛ рд╢реАрд░реНрд╖ рдкрд░ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВред

1. рд╕реНрдкреИрди I/O . рдХреЗ рд▓рд┐рдП ICipherTransform рдмрдирд╛рдПрдВ

рдпрд╣ ICryptoTransform рдХреЗ рд╕реНрдкреИрди рдЬрд╛рдЧрд░реВрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреА рддрд░рд╣ рд╣реИред рдореИрдВ рдлреНрд░реЗрдорд╡рд░реНрдХ рдЕрдкрдЧреНрд░реЗрдб рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╣реА рдмрджрд▓ рджреВрдВрдЧрд╛ рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рд▓реЛрдЧ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднрд╛рд╡реБрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ ICipherTransform рдХрд╣ рд░рд╣рд╛ рд╣реВрдВред

public partial interface ICipherTransform : System.IDisposable
{
  bool CanReuseTransform { get; }
  bool CanTransformMultipleBlocks { get; } // multiple blocks in single call?
  bool CanChainBlocks { get; }             // multiple blocks across Transform/TransformFinal
  int InputBlockSize { get; }
  int OutputBlockSize { get; }
  int TransformBlock(ReadOnlySpan<byte> inputBuffer, int inputOffset, int inputCount, Span<byte> outputBuffer, int outputOffset);
  Span<byte> TransformFinalBlock(ReadOnlySpan<byte> inputBuffer, int inputOffset, int inputCount);
}

рд╕рд╛рде рд╣реА ICryptoTransform рдХреЛ [Obsolete] $ . рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ

.NET рдХреНрд░рд┐рдкреНрдЯреЛ рдХреЗ рдкрд┐рдЫрд▓реЗ рдЬреНрдЮрд╛рди рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рдкреНрд░рддрд┐ рд╡рд┐рдирдореНрд░ рд╣реЛрдирд╛

[Obsolete("See ICipherTransform")]
public partial interface ICryptoTransform : System.IDisposable { ... }

2. рдЕрд╡рдзрд┐ I/O . рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ SymmetricAlgorithm рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ

public abstract class SymmetricAlgorithm : IDisposable
{
  ...
  public abstract ICipherTransform CreateDecryptor(ReadOnlySpan<byte> Key, ReadOnlySpan<byte> IV);
  public abstract ICipherTransform CreateEncryptor(ReadOnlySpan<byte> Key, ReadOnlySpan<byte> IV);
  public virtual ReadOnlySpan<byte> KeySpan {...}
  public virtual ReadOnlySpan<byte> IVSpan {...}
  public virtual ReadOnlySpan<byte> KeySpan {...}
  ...
}

3. рдЕрд╡рдзрд┐ I/O . рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ CryptoStream рдмрдврд╝рд╛рдПрдБ

рдпрд╣ System.Runtime рдореЗрдВ Stream рдХреА рддрд░рд╣ рд╣реА рд╣реИред рд╕рд╛рде рд╣реА рд╣рдо рдЕрдкрдиреЗ AEAD рдорд╛рдорд▓реЗ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ c'tor рдЬреЛрдбрд╝реЗрдВрдЧреЗред

рдорд╣рддреНрд╡рдкреВрд░реНрдг: CryptoStream рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рджреМрд░рд╛рди рд╕реНрдЯреНрд░реАрдо рдХреЗ рдЕрдВрдд рдореЗрдВ рдЯреИрдЧ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рджреМрд░рд╛рди рдЯреИрдЧ (рдЯреИрдЧрд╕рд╛рдЗрдЬ рдмрд╛рдЗрдЯреНрд╕) рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП FlushFinalBlock рдореЗрдВ рдПрдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рдЕрдкрдЧреНрд░реЗрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА ред рдпрд╣ рдЬрд╛рд╡рд╛ рдХреЗ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдпрд╛ рд╕реА # рдмрд╛рдЙрдВрд╕реАрдХрд╛рд╕реНрдЯрд▓ рдЬреИрд╕реЗ рдЕрдиреНрдп рдпреБрджреНрдз рдкрд░реАрдХреНрд╖рдг рдПрдкреАрдЖрдИ рдХреЗ рд╕рдорд╛рди рд╣реИред рдпрд╣ рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рд╣реИ рдлрд┐рд░ рднреА рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдЬрдЧрд╣ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдореЗрдВ рдЯреИрдЧ рдЕрдВрдд рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдлрд┐рд░ рднреА рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рджреМрд░рд╛рди рдЕрдВрддрд┐рдо рдмреНрд▓реЙрдХ рдХреЛ рдмрджрд▓рдиреЗ рддрдХ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЙрд▓реНрдЯрд╛ рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЙрдбрд▓ рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред

рдиреЛрдЯ: 1) рд╕реАрдмреАрд╕реА-рдПрдЪрдПрдордПрд╕реА рдХреЗ рд╕рд╛рде, рдЖрдк рдкрд╣рд▓реЗ рдЯреИрдЧ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕реБрд░рдХреНрд╖рд┐рдд рд╡рд┐рдХрд▓реНрдк рд╣реИ рд▓реЗрдХрд┐рди рдпрджрд┐ рдРрд╕рд╛ рд╣реИ рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рджреЛ рдкрд╛рд╕ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдмрдирд╛рддрд╛ рд╣реИред рдкрд╣рд▓рд╛ рдкрд╛рд╕ рдПрдЪрдПрдордПрд╕реА рдЯреИрдЧ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рджреВрд╕рд░рд╛ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореЗрдореЛрд░реА рд╕реНрдЯреНрд░реАрдо рдпрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╣рдореЗрд╢рд╛ рдореЗрдореЛрд░реА рдореЗрдВ рдмрдлрд╝рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдПрдХ-рд╢реЙрдЯ рдореЙрдбрд▓ рдореЗрдВ рдХрдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛; рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдирд╣реАрдВред рдЬреАрд╕реАрдПрдо рдпрд╛ рд╕реАрд╕реАрдПрдо рдЬреИрд╕реЗ рдЯреНрд░реВ рдПрдИрдПрдбреА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреБрд╢рд▓рддрд╛ рд╕реЗ рд╕реНрдЯреНрд░реАрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

public class CryptoStream : Stream, IDisposable
{
  ...
  public CryptoStream(Stream stream, IAuthenticatedCipherTransform transform, CryptoStreamMode mode);
  public override int Read(Span<byte> buffer, int offset, int count);
  public override Task<int> ReadAsync(Span<byte> buffer, int offset, int count, CancellationToken cancellationToken);
  public override void Write(ReadOnlySpan<byte> buffer, int offset, int count);
  public override Task WriteAsync(ReadOnlySpan<byte> buffer, int offset, int count, CancellationToken cancellationToken);

  public void FlushFinalBlock()
  {
    ...
    // If IAuthenticatedCipherTransform
    //    If encrypting, `TransformFinalBlock` -> `GetTag` -> append to out stream
    //    If decryption, extract last `TagSize` bytes -> `SetExpectedTag` -> `TransformFinalBlock`
    ...
  }

  ...
}

рдкреНрд░рдорд╛рдгрд┐рдд рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдореЗрдВ рдкрд░рдд

рдЙрдкрд░реЛрдХреНрдд рдХреЗ рд╕рд╛рде, рд╣рдо рдПрд╕реЛрд╕рд┐рдПрдЯреЗрдб рдбреЗрдЯрд╛ (AEAD) рдХреЗ рд╕рд╛рде рдкреНрд░рдорд╛рдгрд┐рдд рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдкрддрд╛ рдмрд┐рдЯреНрд╕ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ

AEAD рдХреЗ рд▓рд┐рдП рдирдпрд╛ ICipherTransform рдмрдврд╝рд╛рдПрдБ

рдЗрд╕рд╕реЗ CryptoStream рдЕрдкрдирд╛ рдХрд╛рдо рдареАрдХ рд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╕реНрдЯрдо рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреНрд▓рд╛рд╕/рдЙрдкрдпреЛрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП IAuthenticatedCipherTransform рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди CryptoStream рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдПрдХ рд╕реБрдкрд░-рдХреЛрд╕рд┐рд╡ рдФрд░ рд╕реБрд╕рдВрдЧрдд .net рдХреНрд░рд┐рдкреНрдЯреЛ рдПрдкреАрдЖрдИ рдмрди рдЬрд╛рддрд╛ рд╣реИред

  public interface IAuthenticatedCipherTransform : ICipherTransform
  {
    Span<byte> GetTag();
    void SetExpectedTag(Span<byte> tag);
  }

рдкреНрд░рдорд╛рдгрд┐рдд рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдмреЗрд╕ рдХреНрд▓рд╛рд╕

рдмрд╕ SymmetricAlgorithm рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ

public abstract class AuthenticatedSymmetricAlgorithm : SymmetricAlgorithm
{
  ...
  // Program Key/IV/AAD via class properties OR CreateAuthenticatedEn/Decryptor() params
  public abstract IAuthenticatedCipherTransform CreateAuthenticatedDecryptor(ReadOnlySpan<byte> Key = default, ReadOnlySpan<byte> IV = default, ReadOnlySpan<byte> AuthenticatedData = default);
  public abstract IAuthenticatedCipherTransform CreateAuthenticatedEncryptor(ReadOnlySpan<byte> Key = default, ReadOnlySpan<byte> IV = default, ReadOnlySpan<byte> AuthenticatedData = default);
  public virtual Span<byte> AuthenticatedData {...}
  public virtual Span<byte> Tag {...}
  public virtual int TagSize {...}
  ...
}

рдПрдИрдПрд╕ рдЬреАрд╕реАрдПрдо рд╡рд░реНрдЧ

public class AesGcm : AuthenticatedSymmetricAlgorithm
{
  public AesGcm(ReadOnlySpan<byte> Key = default, ReadOnlySpan<byte> IV = default, ReadOnlySpan<byte> AuthenticatedData = default)

  /* other stuff like valid key sizes etc similar to `System.Security.Cryptography.Aes` */
}

@sidshetye рдореИрдВ рдЗрд╕ рдкреНрд░рдпрд╛рд╕ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВред

рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ-рдПрдирдХреНрд░рд┐рдкреНрдЯ GCM рдкрд░ рд╕рдВрднрд╡ рд╣реИред GCM рдкрд░ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ-рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рд╣реИ

  • NIST 800-38d рдореЗрдВ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред рдзрд╛рд░рд╛ 5.2.2 "рдкреНрд░рдорд╛рдгреАрдХреГрдд рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдлрд╝рдВрдХреНрд╢рди" рдХреНрд░рд┐рд╕реНрдЯрд▓-рдХреНрд▓рд┐рдпрд░ рд╣реИ рдХрд┐ рдбрд┐рдХреНрд░рд┐рдкреНрдЯреЗрдб рдкреНрд▓реЗрдирдЯреЗрдХреНрд╕реНрдЯ P рдХреА рд╡рд╛рдкрд╕реА рдореЗрдВ рдЯреИрдЧ T рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд╣реА рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВред "рд░рд┐рд▓реАрдЬрд╝ рдСрдлрд╝ рдЕрд╕рддреНрдпрд╛рдкрд┐рдд рдкреНрд▓реЗрдирдЯреЗрдХреНрд╕реНрдЯ" (RUP) рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдиреЗ рдХреА рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рдзрд╛рд░рдгрд╛ рд╣реИред 2014 рдХреЗ рдкреЗрдкрд░ рдореЗрдВ рдПрдВрдбреНрд░реАрд╡рд╛-рдПрдЯ-рдЕрд▓ рджреНрд╡рд╛рд░рд╛ рдЖрд░рдпреВрдкреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред RUP рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ GCM рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИ. CAESAR рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреА GCM рд╕реЗ рддреБрд▓рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, RUP рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рд╡рд╛рдВрдЫрдиреАрдп рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреА рд╣реИред GCM рд╕реЗ рдЬрд╛рд░реА рдХрд┐рдП рдЧрдП рдЕрд╕рддреНрдпрд╛рдкрд┐рдд рдкреНрд▓реЗрдирдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ рдорд╛рдореВрд▓реА рд░реВрдк рд╕реЗ рдмрд┐рдЯ-рдлрд╝реНрд▓рд┐рдкрд┐рдВрдЧ рд╣рдорд▓реЛрдВ рдХрд╛ рдЦрддрд░рд╛ рд╣реЛрддрд╛ рд╣реИред

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдЕрд╕рдордорд┐рдд рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ/рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдПрдкреАрдЖрдИ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ (рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ) рд▓рд╛рдИ рдЧрдИ рдереА, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдо рд╕рд╣рдорддрд┐ рдпрд╣ рдереА рдХрд┐ рдпрд╣ рдПрдХ рдмрд╣реБрдд рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛрдЧрд╛ред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЖрдкрдХреЗ рдкрд╛рд╕ GCM рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдмрд╛рдЗрдЯ-рдЧреНрд░реЗрдиреНрдпреБрд▓рд░ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ API рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рднреА рдХрдИ рдмрд╛рд░ рдХрд╣рд╛ рдерд╛, рдФрд░ рдореИрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВред рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдПрдкреАрдЖрдИ рд░рдЦрдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдЦрдВрдбрд┐рдд рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рд╣реИред рдореИрдВ рдЦрдВрдбрд┐рдд рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдкрд░ рд╕рднреА рдХреЛ рдЖрдирдВрджрдордп-рдЧреЛ-рд░рд╛рдЙрдВрдб рдмрдЦреНрд╢ рджреВрдБрдЧрд╛ ..

рдЬреАрд╕реАрдПрдо рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдПрдордПрд╕ рдЬреЛ рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рддрд╛ рд╣реИ, рдЖрд░рдпреВрдкреА рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреА рдЬрд╛ рд╕рдХрддреА рд╣реИред

@sdrapkin RUP рдкрд░ рдпрд╣рд╛рдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереА рдФрд░ рд╣рдо рдкрд╣рд▓реЗ рд╣реА рдЙрд╕ рдкреБрд▓ рдХреЛ рдкрд╛рд░ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЖрд░рдпреВрдкреА рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ рдХрд┐ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рдЯреИрдЧ рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рддрдХ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд╛рд╡рд╛ рдЬреЗрд╕реАрдИ, рд╡рд┐рдирдПрдирдЯреА рдмреАрдХреНрд░рд┐рдкреНрдЯ, рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рдЗрддреНрдпрд╛рджрд┐ рдХреА рддрд░рд╣ рдЗрд╕реЗ рд╡рд┐рдзрд┐ рд╕реАрдорд╛ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреНрд░рд┐рдкреНрдЯреЛ рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡ рдХреА рддрд░рд╣, рдирд┐рдореНрди рд╕реНрддрд░ рд╡рд╛рд▓реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╕рд╛рд╡рдзрд╛рдиреА рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

^^^ рдЗрддрдирд╛ред рдореИрдВ рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рд╕реНрдЯреНрд░реАрдо рдПрдкреАрдЖрдИ рдЖрджрд┐ рдкрд░ рд╕рд╣рдордд рд╣реВрдВ, рдлрд┐рд░ рдЗрд╕реЗ рдареАрдХ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВред рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдирд┐рдореНрди рд╕реНрддрд░ рдХреЗ рдЖрджрд┐рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рд╕реНрдкреНрд▓рд┐рдЯ рдмрдлрд░ рдЗрддреНрдпрд╛рджрд┐ рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдКрдкрд░ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЯреИрдЧ рдХреИрд▓рдХреБрд▓реЗрд╢рди/рдЪреЗрдХрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдореЗрдВ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХреЗрдВ, рд▓реЗрдХрд┐рди рдирд┐рдореНрди рд╕реНрддрд░ рдХреЗ рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡ рдХреЛ рд╣реИрдорд╕реНрдЯреНрд░рд┐рдВрдЧ рди рдХрд░реЗрдВред

рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдореЗрд░реЗ рдКрдкрд░ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

рдЧрд▓рддред рдпрд╣ рдЖрдк рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реИред AES-GCM рдХреА рдПрдХ рдмрд╣реБрдд рд╣реА _specific_ рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИ, рдФрд░ рдпрд╣ рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдпрд╣ рдЖрдк рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реИред рдЖрдк рдЬреЛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣ рдПрдХ рдЕрд▓рдЧ рдПрдИрдПрд╕-рд╕реАрдЯреАрдЖрд░ рдЖрджрд┐рдо рд╣реИ, рдФрд░ рдПрдХ рдЕрд▓рдЧ GHASH рдЖрджрд┐рдо рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдк рддрдм рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЬреИрд╕рд╛ рдЖрдк рдлрд┐рдЯ рджреЗрдЦрддреЗ рд╣реИрдВ, рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдо рдЕрд▓рдЧ AES-CTR рдФрд░ GHASH рдЖрджрд┐рдо рдкрд░ рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣реИ рдирд╛? рд╣рдо рдПрдИрдПрд╕-рдЬреАрд╕реАрдПрдо рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдФрд░ рдПрдИрдПрд╕-рдЬреАрд╕реАрдПрдо рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЖрд░рдпреВрдкреА рдХреА рдЕрдиреБрдорддрд┐ рди рд╣реЛред

рдореИрдВ рдХреНрд░рд┐рдкреНрдЯреЛ.рд╕реНрдЯреИрдХрдПрдХреНрд╕рдЪреЗрдВрдЬ рд╕реЗ рдЗрд▓реНрдорд░реА рдХрд░реЛрдирди рдХреЗ рдЙрддреНрддрд░ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХрд╛ рднреА рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВред

@sdrapkin рдЖрдк рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╡рд╛рдВрдЫрдиреАрдп рд╣реЛрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдВрддрддрдГ рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╣реИ рдЬреЛ рдЖрд░рдпреВрдкреА рдХреЗ рддрд╣рдд рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, рдФрд░ рдЙрд╕ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдПрдкреАрдЖрдИ рдореЗрдВ рдлрд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рддреЛ рд╣рдореЗрдВ рдЪреБрдирдирд╛ рд╣реЛрдЧрд╛:

  1. рдПрдкреАрдЖрдИ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╕рд░рд▓, рд▓реЗрдХрд┐рди рдирд┐рдореНрди-рд╕реНрддрд░реАрдп API рдХреА рдХрдореА рд╣реИред рд╣рдореЗрдВ рдЗрд╕рдХрд╛ рдПрдХ рджрд┐рди рдкрдЫрддрд╛рд╡рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
  2. рдПрдИрдПрд╕-рдЬреАрд╕реАрдПрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдкреАрдЖрдИ рдХреЛ рд╕реАрдорд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реБрдП рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ рд╣рдо рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдкрд░рд┐рджреГрд╢реНрдп рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧ рдЧрд▓рдд рдХреНрдпреЛрдВ рд╣реИ? рдпрд╛ рдХреНрдпрд╛ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкреВрд░реЗ рдмрдлрд░ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрдирд╛ рд╣реЛрдЧрд╛? рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реЛрдЧрд╛: рдЖрдк рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдирд╣реАрдВ рд╣реИрдВред

рд╣рдо рдПрдХ SupportsStreaming(out string whyNot) рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреНрд╡рд╛рд░рд╛ рдЬрд╛рдВрдЪрд╛ рдЧрдпрд╛ рд╣реИред

рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ/рдЯреИрдЧ-рдПрдЯ-рдж-рдПрдВрдб рдХреЗ рдЦрд┐рд▓рд╛рдл рдХреЛрдИ рдареЛрд╕ рддрд░реНрдХ рд╣реИ? рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рд▓рдХреНрд╖реНрдп рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред

@sdrapkin : рдЖрдЗрдП рдЖрд░рдпреВрдкреА рдХрд╛ рд╡реНрдпрд╛рдкрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд▓реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ, рдЖрд╡реЗрджрди рдирд╣реАрдВред рддреЛ рдпрд╣ рдЕрд╕рддреНрдпрд╛рдкрд┐рдд рдбреЗрдЯрд╛ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░рд┐рд▓реАрдЬ/рдЙрдкрдпреЛрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдмрдлрд░рд┐рдВрдЧ рдФрд░ рдкрд░рдд рдбрд┐рдЬрд╛рдЗрди рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред AES GCM рдХреЗ рд▓рд┐рдП NIST рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд╢рди 800-38D рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐

  1. GCM рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдЕрдзрд┐рдХрддрдо рдкреНрд▓реЗрдирдЯреЗрдХреНрд╕реНрдЯ рд▓рдВрдмрд╛рдИ рдХреЛ 2^39-256 рдмрд┐рдЯ ~ 64 GB рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╕рд┐рд╕реНрдЯрдо рдореЗрдореЛрд░реА рдореЗрдВ рдЗрд╕рдХреЗ рдХрд░реАрдм рдХрд╣реАрдВ рднреА рдмрдлрд░рд┐рдВрдЧ рдХрд░рдирд╛ рдЕрдиреБрдЪрд┐рдд рд╣реИред

  2. рдЯреИрдЧ рдХреЗ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдкрд░ GCM рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ FAIL рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЯреИрдЧ рд╕рддреНрдпрд╛рдкрди рддрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдХреМрди рд╕реА рдкрд░рдд рдмрдлрд░ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣ рдирд┐рд░реНрджреЗрд╢рд╛рддреНрдордХ рдирд╣реАрдВ рд╣реИред рдЖрдЗрдП рдПрдХ рдХреЙрд▓ рд╕реНрдЯреИрдХ рдХреЛ рджреЗрдЦреЗрдВ рдЬреИрд╕реЗ:

A => AESGCM_Decrypt_App(key, iv, ciphertext, aad, tag)
B =>  +- AESGCM_Decrypt_DotNet(key, iv, ciphertext, aad, tag)
C =>    +- AESGCM_Decrypt_OpenSSL(key, iv, ciphertext, aad, tag)

рдХрд╣рд╛рдВ
рдП рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкрд░рдд рдкрд░ рдПрдИрдПрд╕ рдЬреАрд╕реАрдПрдо рд╣реИ
B, рднрд╛рд╖рд╛ рд╕реНрддрд░ рдкрд░ AES-GCM рд╣реИ
C рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░рдд рдкрд░ AES-GCM рд╣реИ

рдкреНрд▓реЗрдирдЯреЗрдХреНрд╕реНрдЯ рдХреЛ (рдП) рдкрд░ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдЯреИрдЧ рдЪреЗрдХ рдЖрдЙрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрджрд┐ рдЕрдиреНрдпрдерд╛ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдЬрд╣рд╛рдБ рдХрд▓реНрдкрдирд╛ рдореЗрдВ рдпрд╣ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдореБрдЦреНрдп рдореЗрдореЛрд░реА рдкреНрд▓реЗрдирдЯреЗрдХреНрд╕реНрдЯ-рдЗрди-рдкреНрд░реЛрдЧреНрд░реЗрд╕ рдХреЛ рдмрдлрд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕реНрдерд╛рди рд╣реИ, рди рд╣реА рд╡рд╣ рдмрдлрд░рд┐рдВрдЧ (рдмреА) рдпрд╛ (рд╕реА) рдпрд╛ рдХрд╣реАрдВ рдФрд░ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдУрдкрдирдПрд╕рдПрд╕рдПрд▓, рд╡рд┐рдВрдбреЛрдЬ рдПрдирдЯреА рдмреАрдХреНрд░рд┐рдкреНрдЯ (рд╕реА) рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдЬрд╣рд╛рдВ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░ рдмрдлрд░рд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдФрд░ рдЬрд╛рд╡рд╛ рдЬреЗрд╕реАрдП, рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдХреА рд╕реАрдПрд▓рдЖрд░ рд╕реБрд░рдХреНрд╖рд╛ рдФрд░ рдЙрдкрд░реЛрдХреНрдд рдореЗрд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ (рдмреА) рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ рдЬрд╣рд╛рдВ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░рдд рдкрд░ рдмрдлрд░рд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдпрд╣ рдорд╛рди рд▓реЗрдирд╛ рдмреЗрдорд╛рдиреА рд╣реИ рдХрд┐ рдкреНрд▓реЗрдирдЯреЗрдХреНрд╕реНрдЯ рдЬрд╛рд░реА рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ A рдХреЗ рдбрд┐рдЬрд╛рдЗрдирд░реЛрдВ рдХреЗ рдкрд╛рд╕ рдмреЗрд╣рддрд░ рдмрдлрд░рд┐рдВрдЧ рдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╡рд╣ рдмрдлрд░ рдкреВрд░реЗ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдореЗрдореЛрд░реА рдпрд╛ рдПрд╕рдПрд╕рдбреА рдпрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдХреНрд▓рд╕реНрдЯрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╛ рдкрдВрдЪ рдХрд╛рд░реНрдб;)!

рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдмрдлрд░рд┐рдВрдЧ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдкреЗрдкрд░ рдЕрдиреНрдп рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЪрд┐рдВрддрд╛рдУрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИ (рджреЗрдЦреЗрдВ рдзрд╛рд░рд╛ 9.1, рдбрд┐рдЬрд╛рдЗрди рд╡рд┐рдЪрд╛рд░ рдФрд░ 9.2, рдкрд░рд┐рдЪрд╛рд▓рди рд╕рдВрдмрдВрдзреА рд╡рд┐рдЪрд╛рд░ ) рдЬреИрд╕реЗ рдХреБрдВрдЬреА рддрд╛рдЬрдЧреА рдпрд╛ IV рдмрд┐рдЬрд▓реА рдЕрдирд┐рд╢реНрдЪрд┐рддрдХрд╛рд▓реАрди рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдореЗрдВ рдЧреИрд░-рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ред рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рд▓реЗрдпрд░ B рдпрд╛рдиреА рдпрд╣рд╛рдБ рдкрд░ рдмреЗрдХ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред

@timovzl рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣рд╛рд▓рд┐рдпрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЛрдиреЛрдВ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ - рдПрдХ-рд╢реЙрдЯ (рд╡рд╛рд╕реНрддреБрдХрд╛рд░ рдмрдлрд░рд┐рдВрдЧ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ) рдФрд░ рд╕рд╛рде рд╣реА рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ (рд╡рд╛рд╕реНрддреБрдХрд╛рд░ рдХреЗ рдкрд╛рд╕ рдмреЗрд╣рддрд░ рдмрдлрд░рд┐рдВрдЧ рдХреНрд╖рдорддрд╛рдПрдВ рд╣реИрдВ)ред рдЬрдм рддрдХ рдирд┐рдореНрди рд╕реНрддрд░ рдХреА рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдПрдкреАрдЖрдИ рдкреНрд░рд▓реЗрдЦрди рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЙрдкрднреЛрдХреНрддрд╛ рдЕрдм рдЗрд╕реЗ рдмрдлрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рдорд╛рдг рдореЗрдВ рд╢реВрдиреНрдп рдХрдореА рд╣реИ рдФрд░ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рд╕реЗ рдХреЛрдИ рд╡рд┐рдЪрд▓рди рдирд╣реАрдВ рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд╡реНрдпрд╛рдХрд░рдг, рдЯрд╛рдЗрдкреЛ рдФрд░ рдорд╛рд░реНрдХрдбрд╛рдЙрди рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ

рдмрд┐рдВрдЧреЛ .. рдлрд┐рд░ рд╕реЗ рдпрд╣ рдкрд░рдд рдбрд┐рдЬрд╛рдЗрдирд░реЛрдВ рдХрд╛ рдирд┐рд░реНрдгрдп рд╣реИ рдХрд┐ рдЯреИрдЧ рд╕рддреНрдпрд╛рдкрди рдХрд╣рд╛рдВ рд╣реЛрддрд╛ рд╣реИред рдореИрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░рдд рдкрд░ рдЕрд╕рддреНрдпрд╛рдкрд┐рдд рдбреЗрдЯрд╛ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреА рд╡рдХрд╛рд▓рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдЪрд░реНрдЪрд╛ рд╡рд╛рдкрд╕ рдЖрддреА рд╣реИ рдХрд┐ рдпреЗ "рдЙрдкрднреЛрдХреНрддрд╛" рд╕реНрддрд░ рдПрдкреАрдЖрдИ рд╣реИрдВ рдпрд╛ рд╡реЗ рдЕрд╕рд▓реА рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡ рд╣реИрдВред рдпрджрд┐ рд╡реЗ рд╕рдЪреНрдЪреЗ рдЖрджрд┐рдо рд╣реИрдВ рддреЛ рдЙрдиреНрд╣реЗрдВ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдкрд░реНрджрд╛рдлрд╛рд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдЙрдЪреНрдЪ рд╕реНрддрд░ "рд╕реБрд░рдХреНрд╖рд┐рдд" рдПрдкреАрдЖрдИ рд╢реАрд░реНрд╖ рдкрд░ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЧреИрд░-рдЪрд░реНрдЪрд╛ рдХреЗ рд╕рд╛рде рдКрдкрд░ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдпреЗ рд╕рдЪреНрдЪреЗ рдЖрджрд┐рдо рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдкреИрд░ рдореЗрдВ рдЧреЛрд▓реА рдорд╛рд░ рд╕рдХрддреЗ рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ/рдЖрдВрд╢рд┐рдХ рд╕рд┐рдлрд░рдЯреЗрдХреНрд╕реНрдЯ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред

рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рдХрд┐, "рдЙрдЪреНрдЪ" рд╕реНрддрд░ рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрдирдХреЗ рдКрдкрд░ "рд░реЛрд▓рд┐рдВрдЧ" рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХреЗред

рдореЗрд░реА рд░реБрдЪрд┐ рдиреЗрдЯрд╡рд░реНрдХрд┐рдВрдЧ/рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рд╕реЗ рдЖрддреА рд╣реИ рдФрд░ рдпрджрд┐ рдЖрдк рдЖрдВрд╢рд┐рдХ рдмрдлрд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ "рдПрдХ рд╢реЙрдЯ" рдХрд░рдирд╛ рд╣реИ рддреЛ рдЗрди рдПрдкреАрдЖрдИ рдХреЗ рд╕рд┐рд░реНрдл рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдХрд╛ рдХреЛрдИ рдлрд╛рдпрджрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕реАрдзреЗ рдмреАрд╕реАрдЖрд░рдкреАрдЯреА/рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рдЖрджрд┐ рдкрд░ рдЬрд╛рдирд╛ рдЬрд╛рд░реА рд░рдЦреВрдВрдЧрд╛ред

рдореЗрд░реА рд░реБрдЪрд┐ рдиреЗрдЯрд╡рд░реНрдХрд┐рдВрдЧ/рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рд╕реЗ рдЖрддреА рд╣реИ рдФрд░ рдпрджрд┐ рдЖрдк рдЖрдВрд╢рд┐рдХ рдмрдлрд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ "рдПрдХ рд╢реЙрдЯ" рдХрд░рдирд╛ рд╣реИ рддреЛ рдЗрди рдПрдкреАрдЖрдИ рдХреЗ рд╕рд┐рд░реНрдл рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдХрд╛ рдХреЛрдИ рдлрд╛рдпрджрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕реАрдзреЗ рдмреАрд╕реАрдЖрд░рдкреАрдЯреА/рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рдЖрджрд┐ рдкрд░ рдЬрд╛рдирд╛ рдЬрд╛рд░реА рд░рдЦреВрдВрдЧрд╛ред

рдмрд┐рд▓реНрдХреБрд▓ред рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП рд▓реЛрдЧ рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдпрд╛ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд░реЛрд▓ рдХрд░реЗрдВрдЧреЗред рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдпрд╣ рдЕрдЪреНрдЫреЗ рдЪреЗрддрд╛рд╡рдиреА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рд╣реЛред

@Timovzl , рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдкрд┐рдЫрд▓реЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реА рддрдХрдиреАрдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рдбрд┐рдЬрд╛рдЗрди рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рд╣реИред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рд░рд┐рд▓реАрдЬ рдкрд░ рд╡рд┐рдЪрд╛рд░?

@Sidshetye рдиреЗ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдкреНрд░рд╕реНрддрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдЖрд░рдпреВрдкреА рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдПрдХрд▓ рдЖрд▓реЛрдЪрдирд╛ рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╡рд┐рд░реЛрдз рдХреЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЖрд░рдпреВрдкреА рдХреЛ рдХрдИ рдкрд░рддреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдПрдкреАрдЖрдИ рдХреЛ рдпрд╣ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП; рдФрд░ _no_ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреА рдкреЗрд╢рдХрд╢ рдХреЗ рдЦрд░рд╛рдм рдкреНрд░рднрд╛рд╡ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред)

рдкреНрд░рдЧрддрд┐ рдХреЗ рд╣рд┐рдд рдореЗрдВ, рдореИрдВ рдирд╡реАрдирддрдо рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рдФрд░ рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдХреГрдкрдпрд╛ рдмреЛрд▓реЗрдВ - рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░реЗрдВред

рдореИрдВ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдФрд░ рдПрдХ рдПрдкреАрдЖрдИ рдХреЗ рдЖрдХрд╛рд░ рд▓реЗрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрддреНрд╕рд╛рд╣рд┐рдд рд╣реВрдВред

@Sidshetye , рдореЗрд░реЗ рдХреБрдЫ рдкреНрд░рд╢реНрди рдФрд░ рд╕реБрдЭрд╛рд╡ рд╣реИрдВ:

  1. рдХреНрдпрд╛ рдореМрдЬреВрджрд╛ SymmetricAlgorithm рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рдирд╛ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИ? рдХреНрдпрд╛ рдХреЛрдИ рдореМрдЬреВрджрд╛ рдШрдЯрдХ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдЬрдм рддрдХ рдореИрдВ рдЙрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд▓рд╛рдн рдирд╣реАрдВ рдЦреЛ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХреЗ AuthenticatedEncryptionAlgorithm рджреЗрдЦреВрдВрдЧрд╛ред рдпрджрд┐ рдФрд░ рдХреБрдЫ рдирд╣реАрдВ, рддреЛ рдпрд╣ рдЕрд╡рд╛рдВрдЫрд┐рдд CreateEncryptor / CreateDecryptor (рдЧреИрд░-рдкреНрд░рдорд╛рдгрд┐рдд!) рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрддрд╛ рд╣реИред
  2. рд╢рд╛рдорд┐рд▓ рдШрдЯрдХреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдЕрд╕рдордорд┐рдд рдХреНрд░рд┐рдкреНрдЯреЛ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ, рд╣рд╛рдВ? рд▓рдЧрднрдЧ рд╕рднреА рдШрдЯрдХ рдЕрдкрдиреЗ рдирд╛рдо рд╕реЗ "рд╕рдордорд┐рдд" рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рдХреБрдЫ рдРрд╕рд╛ рдЬрд┐рд╕рд╕реЗ рдореИрдВ рд╕рд╣рдордд рд╣реВрдВред рдЬрдм рддрдХ рд╣рдо SymmetricAlgorithm рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдирд╣реАрдВ рд▓реЗрддреЗ, AuthenticatedSymmetricAlgorithm рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ AuthenticatedEncryptionAlgorithm $ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╢рдмреНрдж рдкреНрд░рдорд╛рдгрд┐рдд рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реБрдПред
  3. рдПрд▓реНрдЧреЛрд░рд┐рдердо рдкрд░ рд╕реЗрдЯрдЯреЗрдмрд▓ Tag рд╕рдВрдкрддреНрддрд┐ рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЯреИрдЧ рдХреЛ рд▓рд┐рдЦрдиреЗ/рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП TryEncrypt / TryDecrypt рдмрджрд▓реЗрдВред
  4. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдмрд╕рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ key , iv , рдФрд░ authenticatedAdditionalData рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдХреНрдпрд╛ рд╣реИ? рдореИрдВ рдХрдИ рдорд╛рдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдФрд░ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдЧреБрдгреЛрдВ рд╕реЗ рджреВрд░ рд░рд╣реВрдБрдЧрд╛ред рдХреНрдпрд╛ рдЖрдк рдЙрдирдХреЗ рдмрд┐рдирд╛ рдПрдХ рдЕрджреНрдпрддрди рдкреНрд░рд╕реНрддрд╛рд╡ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ?
  5. рдХреНрдпрд╛ рд╣рдо рдХрд┐рд╕реА рднреА рд░рд╛рдЬреНрдп рдХреЛ AesGcm рдореЗрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдореЗрд░реА рдкреНрд░рд╡реГрддреНрддрд┐ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ iv рдФрд░ authenticatedAdditionalData рдХреЛ рдмрд╛рд╣рд░ рд░рдЦрдирд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдкреНрд░рддрд┐-рд╕рдВрджреЗрд╢ рд╣реИрдВред key рд░рд╛рдЬреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛрдиреЗ рд▓рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЖрдо рддреМрд░ рдкрд░ рдПрдХ рд╣реА рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдХрдИ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдлрд┐рд░ рднреА, рдкреНрд░рддрд┐-рдХреЙрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рднреА рдХреБрдВрдЬреА рд▓реЗрдирд╛ рд╕рдВрднрд╡ рд╣реИред рд╡рд╣реА рдкреНрд░рд╢реНрди CreateAuthenticatorEncryptor рдХреЗ рд▓рд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП _one way_ рдкрд░ рд╕рдордЭреМрддрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖реЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реВрдВред рдореИрдВ рдкреНрд░рдореБрдЦ рд╕реНрдерд┐рддрд┐ рдХреА рдУрд░ рдЭреБрдХрд╛рд╡ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ AesGcm , рдФрд░ рд╢реЗрд╖ рдХреНрд░рдорд╢рдГ CreateAuthenticatedEncryptor рдпрд╛ TryEncrypt рдореЗрдВред рдпрджрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдПрдХ рдЕрджреНрдпрддрди рдкреНрд░рд╕реНрддрд╛рд╡ рджрд┐рдЦрд╛рдПрдВред :-)
  6. ICipherTransform рд╢рд╛рдпрдж рдПрдХ рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, CipherTransform , рддрд╛рдХрд┐ рдореМрдЬреВрджрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рддреЛрдбрд╝реЗ рдмрд┐рдирд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХреЗред
  7. рд╕рднреА рдлрд╝рдВрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдХреИрдорд▓рдХреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрд░реНрдерд╛рдд рд▓реЛрдЕрд░рдХреЗрд╕ рдореЗрдВ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВред рд╕рд╛рде рд╣реА, рдХреНрдпрд╛ рд╣рдореЗрдВ authenticatedData рдпрд╛ authenticatedAdditionalData рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП? рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╛рдо plaintext рдФрд░ ciphertext рдЪреБрдирдирд╛ рдЪрд╛рд╣рд┐рдПред
  8. рдЬрд╣рд╛рдВ рдХрд╣реАрдВ рднреА IV рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рд╕реЗ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди (рдХреНрд░рд┐рдкреНрдЯреЛрд░реЗрдиреНрдбрдо) IV рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдирд┐рдЪрд▓реЗ рд╕реНрддрд░ рдХреЗ рдПрдкреАрдЖрдИ рдХреЗ рджреБрд░реБрдкрдпреЛрдЧ рдХреЛ рдХрдо рд╕реЗ рдХрдо рдХрдард┐рди рдмрдирд╛ рджреЗрддрд╛ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдпрд╣ рдореБрдлреНрдд рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИред
  9. рдореИрдВ рдЕрднреА рднреА рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ TryEncrypt рдХрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб ciphertext рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЕрд╡рдзрд┐ рдХреА рд▓рдВрдмрд╛рдИ рдХреИрд╕реЗ рдЬрд╛рди рд╕рдХрддрд╛ рд╣реИ! TryDecrypt рдФрд░ plaintext рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдиред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рдореЗрдВ рд╕рдлрд▓рддрд╛ рддрдХ рд▓реВрдк рдореЗрдВ рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдЕрд╕рдлрд▓ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдмрд╛рдж рд▓рдВрдмрд╛рдИ рдХреЛ рджреЛрдЧреБрдирд╛ рдХрд░рдирд╛?

рдЕрдВрдд рдореЗрдВ, рдЖрдЧреЗ рдХреА рд╕реЛрдЪ, рдЗрд╕ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдирд┐рд░реНрдорд┐рдд рдПрдХ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдПрдкреАрдЖрдИ рдХреИрд╕рд╛ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ? рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдкреАрдЖрдИ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдо рдЬрдЧрд╣ рд▓рдЧрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдФрд░ рдЧреИрд░-рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдПрдкреАрдЖрдИ рджреЛрдиреЛрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрддрдиреЗ рд╕реАрдзреЗ рд╣реИрдВ! рдореБрдЦреНрдп рдЕрдВрддрд░ рдЬреЛ рдореИрдВ рдХрд▓реНрдкрдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рд╡рд╣ рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд IV, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЖрдЙрдЯрдкреБрдЯ рдЖрдХрд╛рд░ рдФрд░ рд╕рдВрднрд╡рддрдГ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдкрд░ рдПрдХ рд╕реАрдорд╛ рд╣реИред

рд╡рд┐рдВрдбреЛрдЬ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рднреА рдХрд░рддрд╛ рд╣реИред рдЙрди рджреЛрдиреЛрдВ рдиреЗ рдЬреНрдпрд╛рджрд╛рддрд░ рдЗрд╕реЗ рдореМрдЬреВрджрд╛ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдореЗрдВ рдХрдмреВрддрд░ рдХрд░ рджрд┐рдпрд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ рджреЛрдиреЛрдВ рдПрдХ рд░рд┐рдВрдЪ рдореЗрдВ рдлреЗрдВрдХ рджрд┐рдпрд╛ "рдФрд░ рдпрд╣ рдЙрд╕ рддрд░рдл рд╣реИ рдЬрд┐рд╕ рддрд░рдл рдЖрдкрдХреЛ рдирд┐рдкрдЯрдирд╛ рд╣реИ рдпрд╛ рдореИрдВ рддреНрд░реБрдЯрд┐ рдХрд░реВрдБрдЧрд╛")ред

рдЬрд╛рдУ рдирд╣реАрдВ, рдФрд░ рд▓рд┐рдмрд╕реЛрдбрд┐рдпрдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓реА рд▓рд╣рд░ рдиреЗ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рджреА, рдФрд░ рдмрд╛рдж рдореЗрдВ рд▓реЛрдЧреЛрдВ рдиреЗ рдирд╣реАрдВред рдЪреВрдБрдХрд┐ рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрд╛рдж рдХреА рд▓рд╣рд░ рдореЗрдВ рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдиреЗ рдХреЗ рд╕рд╛рде рдмрдиреЗ рд░рд╣реЗрдВрдЧреЗред рдпрджрд┐ рдПрдХ-рд╢реЙрдЯ рдореЙрдбрд▓ (рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди/рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд▓рд┐рдП, рдХреБрдВрдЬреА рдХреЛ рдХреЙрд▓ рдХреЗ рджреМрд░рд╛рди рдмрдирд╛рдП рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ) рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреА рдорд╛рдВрдЧ рдмрдврд╝реА рд╣реИ, рддреЛ рд╣рдо рдкреБрдирд░реНрдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддреЛ рдЙрд╕ рдкреИрдЯрд░реНрди рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдПрдкреАрдЖрдИ рдкреНрд░рд╕реНрддрд╛рд╡ рдлрд╛рдпрджреЗрдордВрдж рд▓рдЧрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рди рддреЛ рдПрд╕рдЖрдИрд╡реА рдФрд░ рди рд╣реА рд╕реАрд╕реАрдПрдо рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдирдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдПрдкреАрдЖрдИ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рднрд╛рд░реА рдмрдлрд░рд┐рдВрдЧ рд╣реИред рдЪреАрдЬреЛрдВ рдХреЛ рд╕рд╛рдл рд░рдЦрдирд╛ рдмреЗрд╣рддрд░ рд▓рдЧрддрд╛ рд╣реИред

рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреЛ рдкреЗрд▓реЛрдб рдореЗрдВ рдЯреИрдЧ рдХреЛ рдПрдореНрдмреЗрдб рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЬреАрд╕реАрдПрдо рдФрд░ рд╕реАрд╕реАрдПрдо рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдбреЗрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╣рддреЗ рд╣реИрдВ), рдЬрдм рддрдХ рдХрд┐ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕реНрд╡рдпрдВ (рдПрд╕рдЖрдИрд╡реА) рдЗрд╕реЗ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред ( E(...) => (c, t) рдмрдирд╛рдо E(...) => c || t рдпрд╛ E(...) => t || c )ред рдПрдкреАрдЖрдИ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдХреЙрдиреНрд╕реИрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдмрд╕ рд╕реНрдкреИрди рдХреЛ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЦреЛрд▓реЗрдВ)ред

GCM рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдЯреИрдЧ рдмреЗрдореЗрд▓ рд╣реЛрдиреЗ рдкрд░ FAIL рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдПрдирдЖрдИрдПрд╕рдЯреА рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдореИрдХрдЧреНрд░реЗ рдФрд░ рд╡реАрдЧрд╛ рджреНрд╡рд╛рд░рд╛ рдореВрд▓ рдЬреАрд╕реАрдПрдо рдкреЗрдкрд░ рднреА рдХрд╣рддрд╛ рд╣реИ:

рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдСрдкрд░реЗрд╢рди рдкреНрд▓реЗрдирдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рдмрдЬрд╛рдп FAIL рд▓реМрдЯрд╛рдПрдЧрд╛, рдФрд░ рдбрд┐рдХреИрдкреНрд╕реБрд▓реЗрд╢рди рд░реБрдХ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдкреНрд▓реЗрдирдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдлреЙрд░рд╡рд░реНрдб рдпрд╛ рдЖрдЧреЗ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдиреЗ рднреА рдЖрд░рдпреВрдкреА рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ - рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕реЗ рдХреЗрд╡рд▓ рд╣рд╛рде рд╕реЗ рд▓рд╣рд░рд╛рдпрд╛ ("рдЙрдЪреНрдЪ рдкрд░рдд рдЗрд╕рдХрд╛ рдЦреНрдпрд╛рд▓ рд░рдЦреЗрдЧреА" - рд╣рд╛рдБ, рдареАрдХ рд╣реИ)ред

рдпрд╣ рдЖрд╕рд╛рди рд╣реИ: GCM рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рд╕реНрдЯреНрд░реАрдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред GCM рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рд╕реНрдЯреНрд░реАрдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛. рдФрд░ рдХреБрдЫ рднреА рдЕрдм GCM рдирд╣реАрдВ рд╣реИ.

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓реА рд▓рд╣рд░ рдиреЗ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рджреА, рдФрд░ рдмрд╛рдж рдореЗрдВ рд▓реЛрдЧреЛрдВ рдиреЗ рдирд╣реАрдВред рдЪреВрдБрдХрд┐ рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрд╛рдж рдХреА рд▓рд╣рд░ рдореЗрдВ рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдиреЗ рдХреЗ рд╕рд╛рде рдмрдиреЗ рд░рд╣реЗрдВрдЧреЗред

@bartonjs рдЖрдк рд╕рдЪрдореБрдЪ рд╕рднреА рддрдХрдиреАрдХреА рдФрд░ рддрд╛рд░реНрдХрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдгреЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдХрдордЬреЛрд░ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рд░реВрдк рдореЗрдВ рдЧреЛ рдФрд░ libsodium рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рддрд╛рд░реАрдЦреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдирд╛рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╕рдорд╛рди рддрд░реНрдХ рджреЗрддрд╛ рд╣реВрдВред рд╕рд╛рде рд╣реА рд╣рдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗ рд░рд╣реЗ рд╣реИрдВред рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдИрдПрдбреА рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреИрд░-рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рд╕реЗ рд╕рдбрд╝рдХ рдХреЗ рдиреАрдЪреЗ рдРрд╕реЗ рд╕рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рд╣реИ рдирд╛?

рдпрджрд┐ рдПрдХ-рд╢реЙрдЯ рдореЙрдбрд▓ (рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди/рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд▓рд┐рдП, рдХреБрдВрдЬреА рдХреЛ рдХреЙрд▓ рдХреЗ рджреМрд░рд╛рди рдмрдирд╛рдП рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ) рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреА рдорд╛рдВрдЧ рдмрдврд╝реА рд╣реИ, рддреЛ рд╣рдо рдкреБрдирд░реНрдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЧрд┐рдЯрд╣рдм рдкрд░ рдЕрдм рддрдХ рдкреНрд░рджрд░реНрд╢рд┐рдд рдорд╛рдВрдЧ рдЕрдкрд░реНрдпрд╛рдкреНрдд рдХреНрдпреЛрдВ рд╣реИ? рдпрд╣ рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдкрд╣реБрдВрдЪ рд░рд╣рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рдХрд┐рд╕реА рднреА рддрдХрдиреАрдХреА рдпрд╛ рдЧреНрд░рд╛рд╣рдХ рдорд╛рдВрдЧ рдпреЛрдЧреНрдпрддрд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдирдХреА рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

@bartonjs рдЖрдк рд╕рдЪрдореБрдЪ рд╕рднреА рддрдХрдиреАрдХреА рдФрд░ рддрд╛рд░реНрдХрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдгреЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдХрдордЬреЛрд░ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рд░реВрдк рдореЗрдВ рдЧреЛ рдФрд░ libsodium рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рддрд╛рд░реАрдЦреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

рдирд╣реАрдВ, рдореИрдВ рдкреЗрд╢реЗрд╡рд░ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд░реЛрдВ рдХреА рд╕рд▓рд╛рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЕрд╕рд╛рдзрд╛рд░рдг рд░реВрдк рд╕реЗ рдЦрддрд░рдирд╛рдХ рд╣реИ рдФрд░ рд╣рдореЗрдВ AEAD рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред рдлрд┐рд░ рдореИрдВ рд╕реАрдПрдирдЬреА рдЯреАрдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ "рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдЗрд╕реЗ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд▓рдЧрднрдЧ рдХреЛрдИ рднреА рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ" (рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЯреЗрд▓реАрдореЗрдЯреНрд░реА рдмрдирд╛рдо рдХреНрд╖реЗрддреНрд░рд░рдХреНрд╖рдг рд╕рд╣рд╛рдпрддрд╛ рдЕрдиреБрд░реЛрдзреЛрдВ рд╕реЗ рдХрд┐рддрдирд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реИ)ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рдПрдХ-рд╢реЙрдЯ рдорд╛рд░реНрдЧ рдкрд░ рдЪрд▓реЗ рдЧрдП рд╣реИрдВ рдмрд╕ рдирд┐рд░реНрдгрдп рдХреЛ _reinforces_ рдХрд░рддреЗ рд╣реИрдВред

рдЧрд┐рдЯрд╣рдм рдкрд░ рдЕрдм рддрдХ рдкреНрд░рджрд░реНрд╢рд┐рдд рдорд╛рдВрдЧ рдЕрдкрд░реНрдпрд╛рдкреНрдд рдХреНрдпреЛрдВ рд╣реИ?

рдХреБрдЫ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЦрдВрдбрд┐рдд рдмрдлрд╝рд░реНрд╕ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡рддрдГ ReadOnlySequence рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдЧрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЙрд▓рд░ рдХреЛ рдбреЗрдЯрд╛ рдкреБрди: рд╕рдВрдпреЛрдЬрди рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдПрдкреАрдЖрдИ рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдкрд░рд┐рджреГрд╢реНрдп рд╣реИред

рдмрдбрд╝реА рдлрд╛рдЗрд▓реЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрдбрд╝реА рдлрд╛рдЗрд▓реЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЬреАрд╕реАрдПрдо рдХрд╛ рдХрдЯрдСрдл рд╕рд┐рд░реНрдл 64GB рд╣реИ, рдЬреЛ рдХрд┐ "рдЗрддрдирд╛ рдмрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИ" (рдареАрдХ рд╣реИ, рдпрд╣ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ "рд╡рд╛рд╣, рдпрд╣ рдмрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИ" рдпрд╣ рд╣реБрдЖ рдХрд░рддрд╛ рдерд╛)ред рдореЗрдореЛрд░реА-рдореИрдк рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЗрдВ 2GB RAM рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рд╕реНрдкреИрди (2^31-1 рддрдХ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВрдЧреАред рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЕрдзрд┐рдХрддрдо рд╕реЗ рдХреБрдЫ рдмрд┐рдЯреНрд╕ рдХрд╛ рдореБрдВрдбрди рдХрд░ рджрд┐рдпрд╛ рд╣реИ... рдЬреЛ рд╢рд╛рдпрдж рд╕рдордп рдХреЗ рд╕рд╛рде рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдИрдПрдбреА рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреИрд░-рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рд╕реЗ рд╕рдбрд╝рдХ рдХреЗ рдиреАрдЪреЗ рдРрд╕реЗ рд╕рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рд╣реИ рдирд╛?

рдореИрдВ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдЖрд╢реНрд╡рд╕реНрдд рд╣реВрдВ рдХрд┐ @GrabYourPitchforks рд╕рд╣реА рдерд╛ (https://github.com/dotnet/corefx/issues/23629#issuecomment-334638891) рдХрд┐ рд╢рд╛рдпрдж рдПрдХ рд╕рдордЭрджрд╛рд░ рдПрдХреАрдХреГрдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд╣реАрдВ рд╣реИред GCM _requiring_ a nonce/IV рдФрд░ SIV _forbidding_ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ AEAD рдореЛрдб/рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ... AEAD рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рдПрдмреНрд╕рдЯреНрд░реИрдХреНрдЯ рдЕрд╡реЗ" рдзрд╛рд░рдгрд╛ рдирд╣реАрдВ рд╣реИред SIV рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ "рдЯреИрдЧ" рдХрд╣рд╛рдБ рдЬрд╛рддрд╛ рд╣реИред рдЬреАрд╕реАрдПрдо/рд╕реАрд╕реАрдПрдо рдирд╣реАрдВред SIV рдЯреИрдЧ-рдкреНрд░рдердо рд╣реИ, рдХрд▓реНрдкрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ред

SIV рддрдм рддрдХ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдЬрдм рддрдХ рдХрд┐ рдЙрд╕рдХреЗ рдкрд╛рд╕ рд╕рд╛рд░рд╛ рдбреЗрдЯрд╛ рди рд╣реЛред рддреЛ рдЗрд╕рдХрд╛ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ рддреЛ рдлреЗрдВрдХрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ (рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕реЗ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ) рдпрд╛ рдмрдлрд░ (рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдПрди ^ 2 рдСрдкрд░реЗрд╢рди рд╕рдордп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред рд▓рдВрдмрд╛рдИ рдЬреНрдЮрд╛рдд рд╣реЛрдиреЗ рддрдХ CCM рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛; рд▓реЗрдХрд┐рди рд╕реАрдПрдирдЬреА рд▓рдВрдмрд╛рдИ рдореЗрдВ рдкреВрд░реНрд╡-рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрдХреЗрдд рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рд╣реА рдирд╛рд╡ рдореЗрдВ рд╣реИред

рд╣рдореЗрдВ рдПрдХ рдирдпрд╛ рдШрдЯрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд╣рд╛рдБ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рд╣реА рдЪреАрдЬрд╝ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЧрд▓рдд рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛред рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдПрдХ рд╕реНрдЯреНрд░реАрдо рдХреНрд▓рд╛рд╕ (рдХреНрд░рд┐рдкреНрдЯреЛрд╕реНрдЯреНрд░реАрдо рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдЖрдкрдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡) рдХреЛ рддрд╛рд░-рддрд╛рд░ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдФрд░ рдЖрдХрд░реНрд╖рдХ рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЯреИрдЧ рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рдмрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдИ рдХреЗ рд▓рд╛рдн рдХреЛ рд▓рдЧрднрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрддрд╛ рд╣реИред . ( IGcmDecryptor => CryptoStream => StreamReader => XmlReader => "рд░реБрдХреЛ, рдпрд╣ рдХрд╛рдиреВрдиреА XML рдирд╣реАрдВ рд╣реИ..." => рдЕрдиреБрдХреВрд▓реА рд╕рд┐рдлрд░рдЯреЗрдХреНрд╕реНрдЯ рдСрд░реИрдХрд▓) .

рдпрд╣ рдмрд┐рдВрджреБ рдкрд░ рд╣реЛ рд░рд╣рд╛ рд╣реИ ... рдЧреНрд░рд╛рд╣рдХ рдХреА рдорд╛рдВрдЧред

рдЬреИрд╕рд╛ рдХрд┐, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЬреАрд╡рди рдореЗрдВ рдХрдИ рдмрд╛рд░ рд╕реБрдирд╛ рд╣реИ: рдореБрдЭреЗ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдЖрдк рд╣рдорд╛рд░реЗ рдорди рдореЗрдВ рдЧреНрд░рд╛рд╣рдХ рдирд╣реАрдВ рд╣реИрдВред рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдБ рдХрд┐ рд╢рд╛рдпрдж рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ GCM рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред рдЖрдк рдЯреИрдЧ рд╕рддреНрдпрд╛рдкрди рдХреЗ рдмрд╛рдж рддрдХ рдХреЗрд╡рд▓ рдПрдХ рдЕрд╕реНрдерд┐рд░ рдлрд╝рд╛рдЗрд▓/рдмрдлрд░/рдЖрджрд┐ рдХреЛ рд╕реНрдЯреНрд░реАрдо рдХрд░рдирд╛ рдЬрд╛рдирддреЗ рд╣реИрдВред рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЧреИрд░ рдкреНрд░рдмрдВрдзрди рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ, рдФрд░ рдЖрдк рдЗрд╕реЗ рдЧрд▓рдд рд╣реЛрдиреЗ рдХреЗ рдЬреЛрдЦрд┐рдореЛрдВ рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВред рдЖрдк рд╕реНрдЯреНрд░реАрдо рдХреЗ рдЖрдХрд╛рд░ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдФрд░ 2^36-64 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдмрд╛рдж рдПрдХ рдирдП GCM рд╕реЗрдЧрдореЗрдВрдЯ рдореЗрдВ рдХрдЯреМрддреА рдХрд░рдирд╛ рдЬрд╛рдирддреЗ рд╣реИрдВред рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕рдм рдХрд╣рд╛ рдФрд░ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдпрджрд┐ рдЖрдк рдЙрди рдЪреАрдЬреЛрдВ рдХреЛ рдЧрд▓рдд рдкрд╛рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЖрдкрдХреА рдмрдЧ рд╣реИред

рджреВрд╕рд░реА рдУрд░, рдореЗрд░реЗ рдорди рдореЗрдВ рдЬреЛ рдЧреНрд░рд╛рд╣рдХ рд╣реИ, рд╡рд╣ рд╡рд╣ рд╣реИ рдЬреЛ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ "рдореБрдЭреЗ рдЗрд╕реЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдирд╛ рд╣реИ" рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдмреЙрд╕ рдиреЗ рдЙрдиреНрд╣реЗрдВ рдмрддрд╛рдпрд╛ рдерд╛ред рдФрд░ рд╡реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреИрд╕реЗ рдХрд░реЗрдВ рдХреА рдЦреЛрдЬ рдХрд░рддреЗ рд╕рдордп рдХреБрдЫ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдиреЗ рдХрд╣рд╛ "рд╣рдореЗрд╢рд╛ AE рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ" рдФрд░ GCM рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ ".NET рдореЗрдВ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди" рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рдХреНрд░рд┐рдкреНрдЯреЛрд╕реНрдЯреНрд░реАрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рд╡реЗ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЗрд╕ рдмрд╛рдд рдХрд╛ рдХреЛрдИ рдЕрдВрджрд╛рдЬрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ SSLv2 рдЪреБрдирдиреЗ рдЬреИрд╕рд╛ рд╣реА рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ ... рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдПрдХ рдмреЙрдХреНрд╕ рдХреА рдЬрд╛рдБрдЪ рдХреА, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдирд╣реАрдВред рдФрд░ рдЬрдм рд╡реЗ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рддреЛ _рд╡рд╣_рдмрдЧ рдЙрди рд╕рднреА рдХрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдмреЗрд╣рддрд░ рдЬрд╛рдирддреЗ рдереЗ, рд▓реЗрдХрд┐рди рдЧрд▓рдд рдХрд╛рдо рдХреЛ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдЖрдк рд╡рд╣ рдЧреНрд░рд╛рд╣рдХ рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдорди рдореЗрдВ рд╣реИ [...] рдореЗрд░реЗ рдорди рдореЗрдВ рдЬреЛ рдЧреНрд░рд╛рд╣рдХ рд╣реИ, рджреВрд╕рд░реА рдУрд░, рд╡рд╣ рдХреЛрдИ рд╣реИ рдЬреЛ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ "рдореБрдЭреЗ рдЗрд╕реЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдирд╛ рд╣реИ" рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдмреЙрд╕ рдиреЗ рдЙрдиреНрд╣реЗрдВ рдмрддрд╛рдпрд╛ рдерд╛ [...]

@bartonjs рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рддрдп рдХрд░ рд▓рд┐рдпрд╛ рдерд╛ рдХрд┐ рд▓рдХреНрд╖реНрдп рдирд┐рдореНрди рд╕реНрддрд░ рдХреЗ рдПрдкреАрдЖрдИ (рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдХреЗ рддрд╣рдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд▓реЗрдХрд┐рди рдЕрд╕реБрд░рдХреНрд╖рд┐рдд) рдФрд░ рдПрдХ рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рдПрдкреАрдЖрдИ (рдлреБрд▓рдкреНрд░реВрдл) рдХреЗ рджреНрд╡рд╛рд░рд╛ рджреЛ рдЧреНрд░рд╛рд╣рдХ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рдерд╛ред рдпрд╣ рд╢реАрд░реНрд╖рдХ рдореЗрдВ рднреА рд╣реИред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ рджреЗрд╢ рд╣реИ рд▓реЗрдХрд┐рди рдЕрдм рдЕрдиреНрдпрдерд╛ рджрд╛рд╡рд╛ рдХрд░рдХреЗ рдЧреЛрд▓рдкреЛрд╕реНрдЯ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдореВрд░реНрдЦрддрд╛ рд╣реИред

рджреВрд╕рд░реА рдУрд░, рдореЗрд░реЗ рдорди рдореЗрдВ рдЬреЛ рдЧреНрд░рд╛рд╣рдХ рд╣реИ, рд╡рд╣ рд╡рд╣ рд╣реИ рдЬреЛ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ "рдореБрдЭреЗ рдЗрд╕реЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдирд╛ рд╣реИ" рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдмреЙрд╕ рдиреЗ рдЙрдиреНрд╣реЗрдВ рдмрддрд╛рдпрд╛ рдерд╛ред рдФрд░ рд╡реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреИрд╕реЗ рдХрд░реЗрдВ рдХреА рдЦреЛрдЬ рдХрд░рддреЗ рд╕рдордп рдХреБрдЫ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдиреЗ рдХрд╣рд╛ "рд╣рдореЗрд╢рд╛ AE рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ" рдФрд░ GCM рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ ".NET рдореЗрдВ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди" рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рдХреНрд░рд┐рдкреНрдЯреЛрд╕реНрдЯреНрд░реАрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рд╡реЗ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЗрд╕ рдмрд╛рдд рдХрд╛ рдХреЛрдИ рдЕрдВрджрд╛рдЬрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ SSLv2 рдЪреБрдирдиреЗ рдЬреИрд╕рд╛ рд╣реА рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ ... рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдПрдХ рдмреЙрдХреНрд╕ рдХреА рдЬрд╛рдБрдЪ рдХреА, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдирд╣реАрдВред рдФрд░ рдЬрдм рд╡реЗ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╡рд╣ рдмрдЧ рд╣рд░ рдЙрд╕ рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдмреЗрд╣рддрд░ рдЬрд╛рдирддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЧрд▓рдд рдХрд╛рдо рдХреЛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрдиреЗ рджреЗрдВред

@bartonjs рд░реБрдХреЛ, рдирд┐рдореНрди-рд╕реНрддрд░ рдХреЗ рдЖрджрд┐рдо рдХрд╛ рдХреНрдпрд╛ рд╣реБрдЖ? рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдореБрджреНрджреЗ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдмрдЪреНрдЪреЛрдВ рдХреА рджреЗрдЦрднрд╛рд▓ рдкрд░ рд▓рдЪреАрд▓рд╛рдкрди рдерд╛ред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рдореЗрдВ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдпреЛрдЬрдирд╛ рдмрджрд▓ рдЧрдИ рд╣реИ, рддрд╛рдХрд┐ рд╣рдо рд╕рднреА рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реЛрдВред

рд╕рд╛рде рд╣реА, рдХреНрдпрд╛ рдкреНрд░рддрд┐-рдмреНрд▓реЙрдХ рд╡рд┐рдзрд┐рдпрд╛рдВ рдЕрднреА рднреА рд╡рд┐рдЪрд╛рд░рд╛рдзреАрди рд╣реИрдВ, рдпрд╛ рдХреЗрд╡рд▓ рдПрдХ-рд╢реЙрдЯ рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ?

рдореИрдВ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдЖрд╢реНрд╡рд╕реНрдд рд╣реВрдВ рдХрд┐ @GrabYourPitchforks рд╕рд╣реА рдерд╛ (# 23629 (рдЯрд┐рдкреНрдкрдгреА)) рдХрд┐ рд╢рд╛рдпрдж рдПрдХ рд╕рдордЭрджрд╛рд░ рдПрдХреАрдХреГрдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд╣реАрдВ рд╣реИред

рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдпрд╣ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдирд┐рд░рд░реНрдердХ рд▓рдЧрдиреЗ рд▓рдЧрддрд╛ рд╣реИ - рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдЬрд╣рд╛рдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рддрд┐рдмрдВрдз рд╣реИрдВред рд╢рд╛рдпрдж рд╣рдореЗрдВ рдПрдХреАрдХреГрдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдмрдЬрд╛рдп рдПрдИрдПрд╕-рдЬреАрд╕реАрдПрдо рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ рдПрдХ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рд╕рд╛рдЗрдб рдиреЛрдЯ рдХреЗ рд░реВрдк рдореЗрдВ, рдмрд╛рдж рд╡рд╛рд▓рд╛ рдЕрднреА рднреА рднрд╡рд┐рд╖реНрдп рдХреЗ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЕрдзрд┐рдХ рдкреНрд░рддрд┐рдмрдВрдзрд╛рддреНрдордХ рд╣реЛрдиреЗ рдХреА рдЗрд╕рдХреА рд╕рдВрдкрддреНрддрд┐ рд╢рд╛рдпрдж рдПрдХ рдПрдХреАрдХреГрдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╡рд╣рд╛рдВ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛ рджреЗрдЧреАред

рдХреНрдпрд╛ рдкреНрд░рддрд┐-рдмреНрд▓реЙрдХ рд╡рд┐рдзрд┐рдпрд╛рдБ рдЕрднреА рднреА рд╡рд┐рдЪрд╛рд░рд╛рдзреАрди рд╣реИрдВ, рдпрд╛ рдХреЗрд╡рд▓ рдПрдХ-рд╢реЙрдЯ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ?

рдЬреИрд╕рд╛ рдХрд┐ https://github.com/dotnet/corefx/issues/23629#issuecomment -378605071 рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреЛрдЦрд┐рдо рдмрдирд╛рдо рдЗрдирд╛рдо рдмрдирд╛рдо рд╡реНрдпрдХреНрдд-рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдПрдИ рдХреЗ рдХреЗрд╡рд▓ рдПрдХ-рд╢реЙрдЯ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреА рдЪрд╛рд╣рд┐рдПред

рдореИрдВрдиреЗ рдкреВрд░реА рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рдкрдврд╝реА рд╣реИ, рдХреЗрд╡рд▓ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рднрд╛рдЧред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рддреБрдо рдХрд┐рд╕ рджрд┐рд╢рд╛ рдореЗрдВ рдЬрд╛ рд░рд╣реЗ рд╣реЛред рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рдореИрдВ рдЬреЛ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ рд╡рд╣ рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред рдореЗрд░рд╛ 2┬в:

  • рдзрд╛рд░рд╛рдПрдБ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред рдпрджрд┐ рдЖрдк рд╕реАрдзреЗ рдЙрдирдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╕реБрд░рдХреНрд╖рд╛ рднреЗрджреНрдпрддрд╛ рд╣реЛрдЧрд╛, рддреЛ рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдЕрдкрдиреЗ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдПрдкреАрдЖрдИ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдирд┐рд░реНрдорд┐рдд рдПрдХ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдЖрд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдЬреЛ рдзрд╛рд░рд╛рдУрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░реЗрдЧрд╛ (рдПрдХ рдЕрдХреНрд╖рдо рд▓реЗрдХрд┐рди рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХреЗ рд╕реЗ)ред
  • рдпрджрд┐ рдПрдИрдПрд╕-рдЬреАрд╕реАрдПрдо рдХрд┐рд╕реА рднреА рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рдзрд╛рд░рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдПрдИрдПрд╕-рд╕реАрдмреАрд╕реА-рдПрдЪрдПрдордПрд╕реА рдХрд╛ рдХрд╛рдиреВрдиреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдЬреЛ рдзрд╛рд░рд╛рдУрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдпрд╛ рдХреБрдЫ рдЕрдиреНрдп рдПрдИ рдПрд▓реНрдЧреЛрд░рд┐рджрдоред
  • рд╕реНрддрд░ рдЬрд┐рддрдирд╛ рдКрдВрдЪрд╛ рд╣реЛрдЧрд╛, рдЙрддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЧрд▓рддреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рддрдиреЗ рдХрдо рдХреНрд╖реЗрддреНрд░ рд╣реЛрдВрдЧреЗ, рдЙрддрдирд╛ рд╣реА рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред рдЕрд░реНрде - рдПрдкреАрдЖрдИ рдХрд╛ рдкрд░реНрджрд╛рдлрд╛рд╢ рдХрд░реЗрдВ рдЬреЛ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╕рд╛рдорд╛рди рдЫреБрдкрд╛рдПрдЧрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЯреИрдЧ)ред рдмреЗрд╢рдХ, рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдзрд┐рднрд╛рд░ рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рдЪрд╛рд╣рд┐рдП)ред
  • рдЖрдИрдПрдордПрдЪрдУ рдЕрдиреНрдп рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рд╕реЗ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рд╣реИ рдЕрдЧрд░ рд╡реЗ рдмрд╕ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реИрдВред рдУрдкрдирдПрд╕рдПрд▓ рдиреЗ рдЕрдкрдиреЗ рд╕реАрдПрд▓рдЖрдИ рдХреЗ рд╕рд╛рде рдпрд╣реА рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдЦрд░рд╛рдм рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЯреИрдЧ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдХреЛрдИ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ)ред

рд╣рдо (.NET рд╕реБрд░рдХреНрд╖рд╛ рдЯреАрдо) рдЖрдкрд╕ рдореЗрдВ рдФрд░ Microsoft рдХреЗ рднреАрддрд░ рд╡реНрдпрд╛рдкрдХ рдХреНрд░рд┐рдкреНрдЯреЛ рдЯреАрдо рдХреЗ рд╕рд╛рде рд╕рдореНрдорд╛рдирд┐рдд рд╣реБрдПред рд╣рдордиреЗ рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдХрдИ рдореБрджреНрджреЛрдВ рдФрд░ рдЪрд┐рдВрддрд╛рдУрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреАред рдЕрдВрддрддрдГ рдпреЗ рдЪрд┐рдВрддрд╛рдПрдБ рдкрд░реНрдпрд╛рдкреНрдд рдкреНрд░реЗрд░рдХ рдирд╣реАрдВ рдереАрдВ рдХрд┐ рдПрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ GCM API рдХреЛ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рдПрдХ рдореБрдЦреНрдп рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЬрд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ рдЗрд╕ рдлреИрд╕рд▓реЗ рдкрд░ рджреЛрдмрд╛рд░рд╛ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдЗрд╕ рдмреАрдЪ рд╣рдордиреЗ рдЪреАрдЬреЛрдВ рдХреЛ рдЖрдЬ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрджрддрд░ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рд╣реИ: рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЬреАрд╕реАрдПрдо рд╕рдорд░реНрдерди рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреА рдХреНрд░рд┐рдкреНрдЯреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡реЗ рдРрд╕рд╛ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╡реЗ рд╣рдорд╛рд░реЗ рдЗрдЪреНрдЫрд┐рдд рдкрд░рд┐рдЪрдп рд╕реЗ рдирд╣реАрдВ рдЯреВрдЯреЗрдВрдЧреЗред рдЧреИрд░-рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ GCM API.

рдбреЗрдЯрд╛ рдХреЗ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯреЗрдВ рдЬреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ?

@pgolebiowski рдЖрдк рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп .NET рдХреНрд░рд┐рдкреНрдЯреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЧрдИ рд╣реИрдВред

@sdrapkin рдпрд╣ рдХрд░рдиреЗ рд╕реЗ рдЖрд╕рд╛рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред "рд╕реБрд░рдХреНрд╖рд┐рдд" рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рд╣реИред рдРрд╕рд╛ рдХреНрдпрд╛ рд╣реИ рдЬреЛ рд╕рд┐рджреНрдз рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЬрд┐рд╕ рдкрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рднрд░реЛрд╕рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдЖрдк рдЦреБрдж рдХрд╣рддреЗ рд╣реИрдВ:

рдмрд╛рдЙрдВрд╕реА рдХреИрд╕рд▓ рд╕реА # рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдЕрдиреБрд╢рдВрд╕рд╛)ред рдмрд╛рдЙрдВрд╕реА рдХреИрд╕рд▓ c# рдПрдХ рд╡рд┐рд╢рд╛рд▓ (145k LOC) рд╣реИ, рдХреНрд░рд┐рдкреНрдЯреЛ рдХрд╛ рдЦрд░рд╛рдм рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╕рдВрдЧреНрд░рд╣рд╛рд▓рдп рдХреИрдЯрд▓реЙрдЧ (рдЗрд╕рдореЗрдВ рд╕реЗ рдХреБрдЫ рдкреНрд░рд╛рдЪреАрди), рдкреБрд░рд╛рдиреЗ рдЬрд╛рд╡рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдиреЗ .NET (2.0?) рдкрд░ рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдареАрдХ рд╣реИ, рддреЛ рд╡рд┐рдХрд▓реНрдк рдХреНрдпрд╛ рд╣реИрдВ? рд╢рд╛рдпрдж рдЖрдкрдХреА рдЕрдкрдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА? рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ ред рд╣рдореНрдо... рд╢рд╛рдпрдж рд▓рд┐рдмрд╕реЛрдбрд┐рдпрдо-рдиреЗрдЯ? рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ ред

рдЬрдм рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд▓реЗрдЦрд╛рдкрд░реАрдХреНрд╖рд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рддрд▓рд╛рд╢ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рднрд░реЛрд╕реЗрдордВрдж рд╕реНрд░реЛрдд (рдЬреИрд╕реЗ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдпрд╛ рд╕рдореБрджрд╛рдп рджреНрд╡рд╛рд░рд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рд╕реЗ рдЖрддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдРрд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА .NET рдХреЛрд░ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдореМрдЬреВрдж рд╣реИред


  • рдЧреНрд░рд╛рд╣рдХ: рдбреЗрдЯрд╛ рдХрд╛ рдкреНрд░рдорд╛рдгрд┐рдд рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдЬреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ?
  • рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ: рдореБрдЭреЗ рдЦреЗрдж рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рд╣рдорд╛рд░реЗ рдорди рдореЗрдВ рдЧреНрд░рд╛рд╣рдХ рдирд╣реАрдВ рд╣реИрдВред рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬрд┐рд╕рдХрд╛ рдСрдбрд┐рдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рд╕реБрд░рдХреНрд╖рд╛ рд╕рдВрджрд┐рдЧреНрдз рд╣реИ, рдЕрдЧрд░ рдЖрдк рд╕рд╛рдЗрдб-рдЪреИрдирд▓ рд╣рдорд▓реЗ рдХреЗ рддрд╣рдд рд╣рдорд╛рд░реА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИрдВред
  • рдЧреНрд░рд╛рд╣рдХ:

@pgolebiowski рд╡рд┐рдХрд▓реНрдк рдПрдХ рд╕реНрдерд╛рдкрд┐рдд .NET рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ - рдпрд╛рдиреАред рд╡рд╣реА рдЪреАрдЬ рдЬреЛ рд╕рд┐рджреНрдз рд╣реЛ рдЪреБрдХреА рд╣реИ рдФрд░ рдЬрд┐рд╕ рдкрд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп (рдореЗрд░реЗ рд╕рд╣рд┐рдд) рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдХреЗ рд▓рд┐рдП рдиреЗрдЯрд╕реНрдЯреИрдВрдбрд░реНрдб рдореЗрдВ рдИрд╕реАрдбреАрдПрдЪ рдЬреИрд╕реЗ рд▓рд╛рдкрддрд╛ рдХреНрд░рд┐рдкреНрдЯреЛ рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред

рдЖрдк рдЗрдиреНрдлрд░реНрдиреЛ рдлреЛрд░реНрдХреНрд╕ рдХреЛ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдХрдо рд╕реЗ рдХрдо 2 рдХрд╛рдВрдЯреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдХреБрдЫ рдорд╛рдореВрд▓реА рдмрджрд▓рд╛рд╡реЛрдВ рдиреЗ NetStandard20 рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ред

рдЖрдкрдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ 2 рд╕рд╛рд▓ рдкрд╣рд▓реЗ 2 рджрд┐рдиреЛрдВ рдХреЗ рднреАрддрд░ рдПрдХ рдЖрджрдореА рджреНрд╡рд╛рд░рд╛ рдСрдбрд┐рдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореБрдЭреЗ рдЙрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрд╖рдорд╛ рдХрд░реЗрдВред Microsoft рдореЗрдВ, рдЙрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд░реНрдкрд┐рдд рдЯреАрдо рд╣реЛрдЧреА -- рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдкрд░ рдореБрдЭреЗ Cure53 рдХреЗ рд▓реЛрдЧреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рднрд░реЛрд╕рд╛ рд╣реИред

рдЧрдВрднреАрд░рддрд╛ рд╕реЗ, рд╣рдо рдмрд╣реБрдд рд╕реА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕реБрд░рдХреНрд╖рд╛ рд╕рдВрдмрдВрдзреА рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╕рд╛рдордЧреНрд░реА рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред

@pgolebiowski рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдХреЛ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдореБрдЭрд╕реЗ рджреВрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХрд╛ рдХрдерди рд╕рдЯреАрдХ рдирд╣реАрдВ рд╣реИред Inferno рдХрд╛ "Cure53" рд╕рдВрдЧрдарди рдХреЗ 2 рдкреЗрд╢реЗрд╡рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдСрдбрд┐рдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдСрдбрд┐рдЯ рдореЗрдВ 2 рджрд┐рди рд▓рдЧреЗ, рдФрд░ рдкреВрд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА ~1,000 рд▓рд╛рдЗрди рдСрдл рдХреЛрдб рдереАред рдпрд╣ рдкреНрд░рддрд┐ рд▓реЗрдЦрд╛ рдкрд░реАрдХреНрд╖рдХ/рджрд┐рди рдХреЛрдб рдХреА ~ 250 рд▓рд╛рдЗрдиреЗрдВ рд╣реИ - рдХрд╛рдлреА рдкреНрд░рдмрдВрдзрдиреАрдпред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрд╕рд╛рди рдСрдбрд┐рдЯреЗрдмрд┐рд▓рд┐рдЯреА рдЗрдиреНрдлрд░реНрдиреЛ рдХреА рдкреНрд░рдореБрдЦ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдареАрдХ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЗрд╕ рдереНрд░реЗрдб рдХрд╛ рд▓рдХреНрд╖реНрдп рдПрдИрдПрд╕-рдЬреАрд╕реАрдПрдо рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдирд╛ рд╣реИред рдЖрдкрдХрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдПрдИрдПрд╕-рдЬреАрд╕реАрдПрдо рдХрд╛ рднреА рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд▓реЛрдЧ рдЖрдкрдХреЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рддреЛ рдЗрд╕реЗ corefx рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдмрдорд┐рдЯ рдХрд░реЗрдВред рдПрдХ рдЙрдкрдпреБрдХреНрдд рд╕реВрддреНрд░ рдореЗрдВред

рдПрдХ рдФрд░ рдмрд╛рдд, рднрд▓реЗ рд╣реА рдпрд╣ рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реЛ - рдЗрд╕рдХреА .net рдХреНрд░рд┐рдкреНрдЯреЛ рдмреЛрд░реНрдб рджреНрд╡рд╛рд░рд╛ рд╕рдореАрдХреНрд╖рд╛ рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИ рдФрд░ рдпрд╣ рдХреЛрд░рдПрдлрдПрдХреНрд╕ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдореНрдореАрджрд╡рд╛рд░ рднреА рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрд╕ рд╡реНрдпрд░реНрде рдЪрд░реНрдЪрд╛ рдФрд░ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдХрд╛ рдЕрдВрддред

@pgolebiowski рдореИрдВрдиреЗ рдХреБрдЫ рднреА рд╡рд┐рдЬреНрдЮрд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ - рдХреЗрд╡рд▓ рдЖрдкрдХреЗ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджрд┐рдпрд╛, рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧрдХреЗрд╕ рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рдП рдЧрдП рд╡рд┐рдХрд▓реНрдк, рдФрд░ рдЧрд▓рдд рджрд╛рд╡реЛрдВ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ред рдПрдИрдПрд╕-рдЬреАрд╕реАрдПрдо рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕рдХреА .NET рд╕реБрд░рдХреНрд╖рд╛ рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рд╕рдореАрдХреНрд╖рд╛ рдХреА рдЧрдИ рд╣реИ рдФрд░ рд╕рд╣рдорддрд┐ рд╣реБрдИ рд╣реИ, рддрд╛рдХрд┐ рдЖрдк рдЙрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХреЗрдВред

рдХреНрдпрд╛ рдореИрдВ рдХрд╣реАрдВ рднреА рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдПрдИрдПрд╕-рдЬреАрд╕реАрдПрдо рдХрд╛ рдмрдЪрд╛рд╡ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ? рдпрд╛рдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рдпрд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  • рдзрд╛рд░рд╛рдПрдБ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред рдпрджрд┐ рдЖрдк рд╕реАрдзреЗ рдЙрдирдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╕реБрд░рдХреНрд╖рд╛ рднреЗрджреНрдпрддрд╛ рд╣реЛрдЧрд╛, рддреЛ рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдЕрдкрдиреЗ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдПрдкреАрдЖрдИ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдирд┐рд░реНрдорд┐рдд рдПрдХ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдЖрд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдЬреЛ рдзрд╛рд░рд╛рдУрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░реЗрдЧрд╛ (рдПрдХ рдЕрдХреНрд╖рдо рд▓реЗрдХрд┐рди рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХреЗ рд╕реЗ)ред
  • рдпрджрд┐ рдПрдИрдПрд╕-рдЬреАрд╕реАрдПрдо рдХрд┐рд╕реА рднреА рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рдзрд╛рд░рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдПрдИрдПрд╕-рд╕реАрдмреАрд╕реА-рдПрдЪрдПрдордПрд╕реА рдХрд╛ рдХрд╛рдиреВрдиреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдЬреЛ рдзрд╛рд░рд╛рдУрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдпрд╛ рдХреБрдЫ рдЕрдиреНрдп рдПрдИ рдПрд▓реНрдЧреЛрд░рд┐рджрдоред

рдпрд╛ corefx рдХреЗ рд▓рд┐рдП рдПрдХ рдЦреБрд▓реА рд╕рдорд╕реНрдпрд╛ рдмрддрд╛рддреЗ рд╣реБрдП:

рдбреЗрдЯрд╛ рдХреЗ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯреЗрдВ рдЬреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ?


рдмрдХреНрд╢реАрд╢:

рдЖрдк рдЗрдиреНрдлрд░реНрдиреЛ рдлреЛрд░реНрдХреНрд╕ рдХреЛ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдХрдо рд╕реЗ рдХрдо 2 рдХрд╛рдВрдЯреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдХреБрдЫ рдорд╛рдореВрд▓реА рдмрджрд▓рд╛рд╡реЛрдВ рдиреЗ NetStandard20 рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ред [...] рдЗрдиреНрдлрд░реНрдиреЛ рдХрд╛ "Cure53" рд╕рдВрдЧрдарди рдХреЗ 2 рдкреЗрд╢реЗрд╡рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдСрдбрд┐рдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ [...] рдЖрд╕рд╛рди рдСрдбрд┐рдЯреЗрдмрд┐рд▓рд┐рдЯреА рдЗрдиреНрдлрд░реНрдиреЛ рдХреА рдкреНрд░рдореБрдЦ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдареАрдХ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдореИрдВрдиреЗ рдХреБрдЫ рднреА рд╡рд┐рдЬреНрдЮрд╛рдкрди рдирд╣реАрдВ рдХрд┐рдпрд╛

рдПрдХ рддрд░рдл рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ" рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рдХрднреА рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ рд╕рд┐рд░реНрдл рдкреВрд░реНрдг рдФрд░ рд╕реНрдореГрддрд┐ рдЙрдкрдпреЛрдЧ рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП "рдмреНрд▓реЙрдХ" рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЪрд╛рд╣рддрд╛ рдерд╛ред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ "рд╕реНрдЯреНрд░реАрдо" рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдУрдкрдирдПрд╕рдПрд▓ рдФрд░ рд╕реАрдПрдирдЬреА рд╕рдорд░реНрдерди рдХреЛ рдЦреЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд░реНрдо рдХреА рдмрд╛рдд рд╣реИ рдФрд░ рдореВрд▓ рд░реВрдк рд╕реЗ "рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡реНрд╕" рдХреЛ рдХрд┐рд╕реА рднреА рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рдмреЗрдХрд╛рд░ рдмрдирд╛ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВред

@Drawaes рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВ, рдзрд╛рд░рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмреНрд▓реЙрдХ рдСрдкрд░реЗрд╢рди рдЕрдзрд┐рдХ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдЖрдо рдЖрджрдореА рдзрд╛рд░рд╛рдУрдВ рдХреЛ рдЫреВ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╣ рдмреНрд▓реЙрдХ рдСрдкрд░реЗрд╢рди рдХреЗ рдмрдЬрд╛рдп рдПрдХ-рд╢реЙрдЯ рдПрдкреАрдЖрдИ рдХрд╛ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмреНрд▓реЙрдХ рдСрдкрд░реЗрд╢рди _srightforwardly_ рдХреЛ XmlReader рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рдХрдИ рдЦрддрд░реЗ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕реНрдЯреНрд░реАрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдСрдкрд░реЗрд╢рди рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред

рдПрдХ-рд╢реЙрдЯ рдПрдкреАрдЖрдИ рднреА рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдкрд░ рдмреНрд▓реЙрдХ рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рд╣рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдЯреНрд╡рд┐рдХрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдЖрдо рдЖрджрдореА рдХреА рд░рдХреНрд╖рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ _рдФрд░_ рдореЗрдВ рд▓рдЪреАрд▓рд╛рдкрди рд╣реИред

рдЖрд░рдпреВрдкреА рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрднреА рднреА рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЬреАрд╕реАрдПрдо рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рддрдирд╛ рд▓рд╛рдн рдмреНрд▓реЙрдХ рдСрдкрд░реЗрд╢рди рд╣реИред рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХрд╛ рдкреВрд░рд╛ рд▓рд╛рдн рдорд┐рд▓рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рд╕реЗ рдХреБрдЫ рд╣реА рд▓рд╛рдн рд╣реЛрддрд╛ рд╣реИред рд╣рдо рдкреВрд░реНрдг рд╕рд┐рдлрд░рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЕрднреА рднреА рдкреВрд░реНрдг рдкреНрд▓реЗрдирдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдмрдлрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдПрдХ рдбрд┐рдХреНрд░рд┐рдкреНрдЯрд░ рдЗрдВрдЯрд░рдореАрдбрд┐рдПрдЯ рдкреНрд▓реЗрдирдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдбрд┐рд╕реНрдХ рдкрд░ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рдЪреБрди рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдмрджрд▓реЗ рдореЗрдВ, рд╣рдордиреЗ рддреНрд░реБрдЯрд┐ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдЬрдЧрд╣ рдкреЗрд╢ рдХреА рд╣реИред рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░ рд╣рд▓ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдареЛрд╕ рддрд░реНрдХ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╡рд╣рд╛рдВ рдЦрдВрдб, рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ)?

рдЯреАрдПрд▓рдПрд╕ рдФрд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрдиред рд╡рд░реНрддрдорд╛рди рдореЗрдВ (рдФрд░ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП) рдкрд╛рдЗрдкрд▓рд╛рдЗрди 4k рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ рд▓реЗрдХрд┐рди рдПрдХ tls рд╕рдВрджреЗрд╢ 16k рд╕рд┐рдлрд░ рдЯреЗрдХреНрд╕реНрдЯ рдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рд╢реЙрдЯ рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 16k рдХреЛ рдПрдХ рдПрдХрд▓ рдЖрдХрд╕реНрдорд┐рдХ рдмрдлрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдмреНрд▓реЙрдХ рдХреЗ рд╕рд╛рде рдЖрдк 4 рдпрд╛ 5 рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдмреНрд▓реЙрдХ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ 16 рдмрд╛рдЗрдЯреНрд╕ рддрдХ рдмрдлрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

@Drawaes 16k рдЕрднреА рднреА рд╕реНрдерд┐рд░ рд╣реИ рдФрд░ рд╡рд┐рд╢рд╛рд▓ рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЗрд╕рд╕реЗ рдмрд╣реБрдд рдлрд░реНрдХ рдкрдбрд╝рддрд╛ рд╣реИ?

рд╣рд╛рдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рдПрдХ рдФрд░ рдкреНрд░рддрд┐ рд╣реИред рдЗрд╕рдХрд╛ perf рдкрд░ рдПрдХ рдмрдбрд╝рд╛ рдФрд░ рдФрд╕рдд рджрд░реНрдЬреЗ рдХрд╛ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рддрд╛ рд╣реИред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ? рдЕрдЧрд▓реЗ рдЪрд░рдг рдХреНрдпрд╛ рд╣реИрдВ? @Drawaes

рдПрдИрдПрд╕-рдЬреАрд╕реАрдПрдо рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓реЙрдХ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдЗрд╕рдХреА рдбрд┐рд▓реАрд╡рд░реА рдмрд╛рдзрд┐рдд рд╣реИ: https://github.com/dotnet/corefx/issues/7023ред @blowdart , рдХреНрдпрд╛ рдЖрдк рдЕрдирд▓реЙрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЬрдм рд▓реЛрдЧ рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рддреЛ рдкреНрд░рдЧрддрд┐ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдард┐рди рд╣реИред рдпрд╛, рдпрджрд┐ рдпрд╣ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░реЗрдВ рдЬреЛ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЬрдирддрд╛ рдХреЗ рд▓рд┐рдП рд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдирд╣реАрдВ, рдореИрдВ рдЗрд╕реЗ рдЕрдирд▓реЙрдХ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдПрдХ рдирд┐рд░реНрдгрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд┐рд╖рдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

@blowdart рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рд╢рд╛рдпрдж рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛:

рдпрд╛, рдпрджрд┐ рдпрд╣ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░реЗрдВ рдЬреЛ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЬрдирддрд╛ рдХреЗ рд▓рд┐рдП рд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдореИрдВ рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдПрдИрдПрд╕-рдЬреАрд╕реАрдПрдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╡рд╣ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЕрдм рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдПрдИрдПрд╕-рдЬреАрд╕реАрдПрдо рдбрд┐рдЬрд╛рдЗрди рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдЪрд░реНрдЪрд╛ рдпрд╣рд╛рдВ рд╣реЛ рдпрд╛ рдХрд┐рд╕реА рдирдП рдЕрдВрдХ рдореЗрдВ?

рд╕рд╛рде рд╣реА, рдпрджрд┐ рд╡рд╣ рд╡рд┐рд╖рдп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдмрдВрдж рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛? рдФрд░ рдЙрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╢реАрд░реНрд╖рдХ рдмрджрд▓рдХрд░ рдЗрд╕реЗ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЕрднреА рдпрд╣ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдЪрд░реНрдЪрд╛ рдпрд╣рд╛рдВ рд╣реЛрдЧреА: https://github.com/dotnet/corefx/issues/7023ред рд╢рд╛рдпрдж рдХреБрдЫ рдРрд╕рд╛ рддрдп рдХрд░реЗрдВ рдХрд┐ рдкрд╣рд▓реЗ рдХреМрди рд╕рд╛ рдПрдИрдПрдбреА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╣реИ ред

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ: рдореИрдВ рдлреАрдбрдмреИрдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдИрдПрд╕-рдЬреАрд╕реАрдПрдо рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

@ рдХрд░реЗрд▓реНрдЬрд╝

@pgolebiowski рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдкреАрдЖрд░ рдЖрдЙрдЯ рд╣реИред рдпрд╣ рд╕рдВрднрд╡рдд: рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣ рдмреБрдзрд╡рд╛рд░ рдХреЛ рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

omariom picture omariom  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

GitAntoinee picture GitAntoinee  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jkotas picture jkotas  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sahithreddyk picture sahithreddyk  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

omajid picture omajid  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ