close
The Wayback Machine - https://web.archive.org/web/20220507084749/https://www.ipa.go.jp/security/rfc/RFC5246-06JA.html

5 <- index ->7


6. TLS ���R�[�h�v���g�R�� English

TLS ���R�[�h�v���g�R���́A�w��̃v���g�R���ł���B�e�w�ɂ����āA���b�Z�[�W�́Alength�Adescription ����� content�p�̃t�B�[���h���܂މ”\��������B���R�[�h�v���g�R���́A�]�������ׂ� ���b�Z�[�W�𓾂āA���̃f�[�^���Ǘ��”\�� blocks �ɕ������A�I�v�V�����Ƃ��āA���̃f�[�^�����k���AMAC ��K�p���A �Í������A���̌��ʂ�]������B��M���ꂽ�f�[�^�́A��������A���؂���A�𓀁idecompress�j����A�č\���ireassemble�j����A�����āA���ʑw�N���C�A���g���ɔz����B

���R�[�h�v���g�R�����g�� 4 �‚̃v���g�R���́A�{�����ɋL�q����Ă���B�F �n���h�V�F�C�N�v���g�R���A�A���[�g�v���g�R���Achange cipher spec �v���g�R���A����сA�A�v���P�[�V�����f�[�^�v���g�R���BTLS �v���g�R���̊g�������e���邽�߂ɁA�lj��I�ȃ��R�[�h�R���e���c��ʂ��A���R�[�h�v���g�R���ɂ���ăT�|�[�g�����”\��������B IANA �ɂ���āA�V���� ���R�[�h content type �l���A12 ���ɋL�q����Ă���悤�� TLS Content Type Registry ���Ɋ��蓖�Ă�ꂽ�B

�����́A���炩�̊g���ɂ���Č��‚���Ȃ�����A�{�����ɒ�`����Ă��Ȃ����R�[�h��ʂ𑗂��Ă��Ȃ�Ȃ��iMUST NOT�j�B���� TLS �������\�����Ă��Ȃ��������R�[�h��ʂ��󂯎��ꍇ�A����́Aunexpected_message �A���[�g�𑗂�Ȃ�����Ȃ�Ȃ��iMUST�j�B

TLS ��ɂ����ė��p����悤�ɐ݌v���ꂽ�A������v���g�R���́A����ɑ΂���A���ׂẲ”\������U�����������߂ɒ��Ӑ[���݌v����Ȃ���΂Ȃ�Ȃ��B���ۖ��Ƃ��āA����́A�u���̃v���g�R���݌v�҂́A�w�ǂ̃Z�L�����e�B������ TLS ���񋟂��A�����Ē񋟂��Ȃ����A����ɁA��҂Ɉˑ��ł��Ȃ����Ɓx��F�����Ă����Ȃ���΂Ȃ�Ȃ����Ɓv���Ӗ�����B

�u���R�[�h�̎�ʂƒ����́A�Í����ɂ���Ėh�삳��Ă��Ȃ����Ɓv�ɓ��ɒ��ӁB���̏�񎩑̂��戵���ӂł���ꍇ�A�A�v���P�[�V�����݌v�҂́A���R�k���ŏ������邽�߂̃X�e�b�v�i�p�f�B���O�A�g���t�B�b�N�̉B�g�icover�j�j�𓥂ނ��Ƃ�]�މ”\��������B

6.1. �R�l�N�V������� English

TLS �R�l�N�V������Ԃ́ATLS ���R�[�h�v���g�R���̉^�p�‹��ł���B����́A���k�A���S���Y���A�Í����A���S���Y������� MAC �A���S���Y�����K�肷��B����ɁA�����̃A���S���Y���p�̃p�����[�^�́A���m�ƂȂ�B�F read ����� write �̑o������ MAC ������уo���N�Í������̗����ɂ�����R�l�N�V�����p������B���_�I�ɂ́A��ɁA�d�v�ȁioutstanding�j4 �‚̃R�l�N�V������Ԃ�����B�F ���݂� read ��Ԃ� write ��ԁA����сA�ۗ����� read ��Ԃ� write ��Ԃ�����B���ׂẴ��R�[�h�́A���݂� read ����� write ��Ԃ̂��Ƃŏ��������B���ۗ̕��ipending�j��ԗp�̃Z�L�����e�B�p�����[�^�́ATLS Handshake �v���g�R���ɂ���ăZ�b�g�����”\��������B�����āAChangeCipherSpec �́A�����ۗ̕��ipending�j��Ԃ�I��I�� current �ɂł���B���̏ꍇ�A�K�؂Ȍ��݂̏�� ����������idisposed�j�A�ۗ��ipending�j��Ԃɏ�����������B�G ���ɁA���ۗ̕��ipending�j��Ԃ́A��̏�Ԃɍď����������B�Z�L�����e�B�p�����[�^�ŏ���������Ă��Ȃ���Ԃ����݂̏�Ԃɂ��邱�Ƃ́A�s���ł���B�����́A���݂̏�Ԃ́A��ɁA�u�Í����A���k�������� MAC �́A�g���Ȃ��v�ƋK�肷��B

TLS �R�l�N�V���� �� read �� write ��ԗp�̃Z�L�����e�B�p�����[�^�́A���L�̒l��񋟂��邱�Ƃɂ���ăZ�b�g�����B�F

connection end
  �u���̎�̂́A���̃R�l�N�V�����ɂ����� "client" �������� "server"�ƌ��Ȃ���邩�ۂ��H�v�i�������j�B

PRF algorithm
 

�����A���� master secret (5 �� �� 6.3 �����Q�Ɓj���琶�����邽�߂Ɏg����A���S���Y���B


bulk encryption algorithm
 

�o���N�Í����p�Ɏg����ׂ��A���S���Y���B���̎d�l�́A���̃A���S���Y���̌����A���ꂪ�u���b�N�ł��邩�^�X�g���[���ł��邩�^AEAD cipher �ł��邩�A�i�K�؂ȏꍇ�j���� cipher �̃u���b�N���A����сA�����I�iexplicit�j����іَ��I�iimplicit�j�ȏ������x�N�g���i�������� nonces�j
�̒������܂ށB


MAC algorithm
  ���b�Z�[�W�F�ؗp�Ɏg����A���S���Y���B���̎d�l�́AMAC �A���S���Y���ɂ���ĕԂ����l�̑傫�����܂ށB

compression algorithm
  �f�[�^���k�p�Ɏg����ׂ��A���S���Y���B���̎d�l�́A���̃A���S���Y�������k���邽�߂ɗv������A���ׂĂ̏����܂܂Ȃ���΂Ȃ�Ȃ��B

master secret
  �R�l�N�V�������� 2 �s�A�Ԃŋ��L���ꂽ 48 byte �� secret�B

client random
  ���̃N���C�A���g�ɂ���Ē񋟂��ꂽ 32 byte �l�B

server random
 
���̃T�[�o�ɂ���Ē񋟂���� 32 byte �l�B
 
�����̃p�����[�^�́A���L�̂悤��
the presentation language �Œ�`�����B: enum { server, client } ConnectionEnd;enum { tls_prf_sha256 } PRFAlgorithm; enum { null, rc4, 3des, aes } BulkCipherAlgorithm; enum { stream, block, aead } CipherType; enum { null, hmac_md5, hmac_sha1, hmac_sha256, hmac_sha384, hmac_sha512} MACAlgorithm; enum { null(0), (255) } CompressionMethod; /* CompressionMethod�APRFAlgorithm�ABulkCipherAlgorithm ���ɋK�肳�ꂽ�A���S���Y���B
�����āAMACAlgorithm ���A��������”\��������B*/ struct { ConnectionEnd entity; PRFAlgorithm prf_algorithm; BulkCipherAlgorithm bulk_cipher_algorithm; CipherType cipher_type; uint8 enc_key_length; uint8 block_length; uint8 fixed_iv_length; uint8 record_iv_length; MACAlgorithm mac_algorithm; uint8 mac_length; uint8 mac_key_length; CompressionMethod compression_algorithm; opaque master_secret[48]; opaque client_random[32]; opaque server_random[32]; } SecurityParameters;

���R�[�h�w�́A���L�� 6 ���ڂ𐶐����邽�߂̃Z�L�����e�B�p�����[�^���g���B(�����̂����‚��́A���ׂĂ̈Í��ɂ���ėv�������킯�ł͂Ȃ��̂ŁA��ł���B�j�F

  client write MAC ��
server write MAC ��
client write ������
server write ������
client write IV
server write IV

�N���C�A���g�� write �p�����[�^�́A���R�[�h���󂯎���ď�������Ƃ��A���̃T�[�o�[�ɂ���Ďg����B�����āA�t�̂Ƃ����܂����l�ł��B�Z�L�����e�B�p�����[�^����A�����̍��ڂ𐶐����邽�߂Ɏg����A���S���Y���́A6.3 �� �ɋL�q����Ă���B

�ЂƂ��уZ�L�����e�B�p�����[�^����������A���̌������������ƁA���̃R�l�N�V������Ԃ́A���������݂̏�Ԃɂ��邱�Ƃɂ���ėᎦ�����”\��������B�����̌��݂̏�Ԃ́A���������e���R�[�h�ɂ‚��čX�V����Ȃ�����Ȃ�Ȃ��iMUST�j�B�e�R�l�N�V������Ԃ́A���L�̗v�f���܂ށB�F

compression state

  ���k�A���S���Y���̌��݂̏�ԁB

cipher state
  �Í����A���S���Y���̌��݂̏�ԁB����́A���̃R�l�N�V�����p�ɃX�P�W���[�����ꂽ�����琬��B�X�g���[���Í��ɂ‚��āA����́A�u�f�[�^���Í����������͕������邱�Ƃ𑱂��邽�߂ɁA���� stream �����e�����ԏ�񂪕K�v�s�Œ��ł��邩�ۂ��H�v�����߂�B

MAC key
  ��L�̂悤�ɐ������ꂽ�R�l�N�V�����p�� MAC ���B

sequence number
 

�e�R�l�N�V������Ԃ́A�V�[�P���X�ԍ����܂݁A����́Aread ��ԗp�� write ��ԗp�ɕ������Ĉێ��Ǘ������B�V�[�P���X�ԍ��́A�R�l�N�V������Ԃ� active state �Ƃ��ꂽ�Ƃ��͏�Ƀ[���ɃZ�b�g����Ȃ�����Ȃ�Ȃ��iMUST�j�B�V�[�P���X�ԍ��́Atype uint64 �ł���A2^64-1 ���z���Ă͂����Ȃ��B�V�[�P���X�ԍ��́A��܂Ȃ��BTLS �������V�[�P���X�ԍ����ށiwrap�j���Ƃ�K�v�Ƃ���ꍇ�A����́A����ɍČ��‚��Ȃ���΂Ȃ�Ȃ��B�V�[�P���X�ԍ��́A�e���R�[�h��ɑ��������B�F ��̓I�ɂ́A �������� �R�l�N�V���� ��Ԃ̂��Ƃœ]�����ꂽ�ŏ��̃��R�[�h�́A�V�[�P���X�ԍ��Ƃ��� 0 ���g��Ȃ�����Ȃ�Ȃ��iMUST�j�B


6.2. ���R�[�h�w English

TLS ���R�[�h�w�́Auninterpreted �f�[�^��C�ӂ̒����̋�łȂ��u���b�N���̍��ʑw����󂯎��B

6.2.1. Fragmentation English

���R�[�h�w�́A���u���b�N���A�f�[�^�� 2^14 byte �ȉ��� chunks �ɂ��ĉ^�� TLSPlaintext ���R�[�h�ɕ�������B�N���C�A���g���b�Z�[�W���E�́A���R�[�h�w���Ɋm�ۂ���Ă��Ȃ��B�i���Ȃ킿�A����� ContentType �����•����̃N���C�A���g���b�Z�[�W���A�P��� TLSPlaintext ���R�[�h�Ɍ���������”\��������iMAY�j���A���邢�́A�P��̃��b�Z�[�W�́A�����‚��̃��R�[�h�Ɍׂ�悤�ɕ���������”\��������iMAY�j�B�j

   struct {
       uint8 major;
       uint8 minor;
   } ProtocolVersion;

   enum {
       change_cipher_spec(20), alert(21), handshake(22),
       application_data(23), (255)
   } ContentType;

   struct {
       ContentType type;
       ProtocolVersion version;
       uint16 length;
       opaque fragment[TLSPlaintext.length];
   } TLSPlaintext;
type
 

���������ꂽ�t���O�����g���������邽�߂Ɏg�����ʑw�v���g�R���B


version
 

�̗p���ꂽ�v���g�R���̃o�[�W�����B�{���́ATLS �o�[�W���� 1.2 ���L�q���Ă���A����́A�o�[�W���� { 3, 3 } ���g���B�o�[�W�����l 3.3 �́ATLS 1.0 �ɂ‚��� {3, 1} �����p���ꂽ���Ƃ��瓱�����o�܏�̂��̂ł���B�iAppendix A.1.�Q�ƁjTLS �̕����o�[�W�������T�|�[�g����N���C�A���g�́A�uServerHello ����M����O�ɁA�ǂ̃o�[�W�������̗p����邩�H�v��m��Ȃ��”\�������邱�Ƃɒ��ӁB�u�ǂ̃��R�[�h�w�̃o�[�W�����ԍ����AClientHello �ɂ‚��č̗p�����K�v�����邩�H�v�ɂ‚��Ă̌����ɂ‚��ẮAAppendix E �Q�ƁB


length
  ���L�� TLSPlaintext.fragment �̒����ibyte �P��)�B���̒����́A2^14 ���z���Ă��Ȃ�Ȃ��iMUST NOT�j�B

fragment
  �A�v���P�[�V�����f�[�^�B���̃f�[�^�́A���ߓI�ł���Atype �t�B�[���h�ɂ���ċK�肳�ꂽ���ʑw�v���g�R���ɂ���Ĉ�����ׂ��A�Ɨ������u���b�N�Ƃ��Ĉ�����B

�����́AHandshake�AAlert �������� ChangeCipherSpec content ��ʂ̃[�����t���O�����g�𑗂�Ȃ�����Ȃ�Ȃ��iMUST NOT�j�B�A�v���P�[�V�����f�[�^ �� Zero-length �̒f�Ђ́A���ݓI�Ƀg���t�B�b�N���͑΍�Ƃ��ėL�p�ł���̂ŁA�������”\��������iMAY�j�B

���F �قȂ� TLS ���R�[�h�w content ��ʂ̃f�[�^���}���iinterleave�j������”\��������iMAY�j�B�A�v���P�[�V�����f�[�^ �́A��ʂɁA�]���ɂ‚��āA���̃R���e���c��ʂ����D��x���Ⴂ���̂ł���B�������A���R�[�h�́A���̃l�b�g���[�N���ɁA���R�[�h�w�ɂ���Ď���Ă���̂Ɠ������ɔz�M����Ȃ�����Ȃ�Ȃ��iMUST�j�B��M�҂́A�R�l�N�V�������̍ŏ��� handshake�ȍ~�� handshakes �Ƃ̊ԂɁAinterleaved �A�v���P�[�V�����w�g���t�B�b�N����M���ď������Ȃ�����Ȃ�Ȃ��iMUST�j�B

6.2.2. ���R�[�h�̈��k����� Decompression English

���ׂẴ��R�[�h�́A���݂̃Z�b�V������Ԓ��ɒ�`���ꂽ���k�A���S���Y�����g���Ĉ��k�����B��ɁA�A�[�J�C�u���k�A���S���Y�������݂���B�G �������A�ŏ��A����́ACompressionMethod.null �Ƃ��Ē�`�����B���̈��k�A���S���Y���́ATLSPlaintext �\���̂� TLSCompressed �\���̂ɖ|�󂷂�B���k�֐��́A�R�l�N�V������Ԃ� active �ɂ����Ƃ��͏�Ƀf�t�H���g��ԏ��ɏ����������B[RFC3749] �́ATLS �ɂ‚��Ă̈��k�A���S���Y�����L�q����B

���k�́A���X���X�ilossless�j�łȂ���΂Ȃ炸�A���̃R���e���c�̒����� 1024 byte �ȏ�A���₳�Ȃ��”\��������B���̉𓀁idecompression�j�֐��� 2^14 byte ���z���钷���ɉ𓀂���� TLSCompressed.fragment �ɑ�������ꍇ�A����́Afatal �𓀁idecompression�j���s�G���[��񍐂��Ȃ�����Ȃ�Ȃ��iMUST�j�B

   struct {
       ContentType type;       /* same as TLSPlaintext.type */
       ProtocolVersion version;/* same as TLSPlaintext.version */
       uint16 length;
       opaque fragment[TLSCompressed.length];
   } TLSCompressed;
length
  ���L�� TLSCompressed.fragment �̒����iin bytes�j�B���̒����́A2^14 + 1024 ���z���Ă��Ȃ�Ȃ��iMUST NOT�j�B

fragment
 

TLSPlaintext.fragment �̈��k���ꂽ�`�ԁB
���F CompressionMethod.null ����́Aidentity ����ł���B�G ���ς��ꂽ�t�B�[���h�́A�����B

������̒��ӁF �𓀁iDecompression�j�֐��́A�u���b�Z�[�W�́A�����o�b�t�@�� overflows ���N�������Ȃ����Ɓv���m�ۂ��邱�Ƃɂ‚��ĐӔC�𕉂��B

6.2.3. ���R�[�h Payload �h�� English

  �Í��� ����� MAC �֐��́ATLSCompressed structure �� TLSCiphertext �ɖ|�󂷂�B���̕����֐��́A���̉ߒ����t�ɂ���B���̃��R�[�h�� MAC �́A�����������b�Z�[�W�A�]�v�ȃ��b�Z�[�W���邢�͒u��������ꂽ���b�Z�[�W�����m�”\�ƂȂ�悤�ɁA�V�[�P���X�ԍ����܂ށB
   struct {
       ContentType type;
       ProtocolVersion version;
       uint16 length;
       select (SecurityParameters.cipher_type) {
           case stream: GenericStreamCipher;
           case block:  GenericBlockCipher;
           case aead:   GenericAEADCipher;
       } fragment;
   } TLSCiphertext;
type
  type �t�B�[���h�́ATLSCompressed.type �Ɠ���ł���B

version
  version �t�B�[���h�́ATLSCompressed.version �Ɠ���ł���B

length
  ���L�� TLSCiphertext.fragment �̒����iin bytes�j�B�����́A
2^14 + 2048 ���z���Ă��Ȃ�Ȃ��iMUST NOT�j�B

fragment
  TLSCompressed.fragment, with the MAC
�̈Í������ꂽ form�B

6.2.3.1. Null �������͕W���X�g���[���Í� English

�X�g���[���Í��iBulkCipherAlgorithm.null ���܂ށB�G Appendix A.6 �Q�Ɓj�́ATLSCompressed ��ϊ�����B�\���̂Ɂ^���� stream TLSCiphertext ���^�ɕ��������B

   stream-ciphered struct {
       opaque content[TLSCompressed.length];
       opaque MAC[SecurityParameters.mac_length];
   } GenericStreamCipher;

MAC �́A���L�̂悤�ɐ��������B�F

   MAC(MAC_write_key, seq_num +
                         TLSCompressed.type +
                         TLSCompressed.version +
                         TLSCompressed.length +
                         TLSCompressed.fragment);

������ "+" �́A�A����\���B

seq_num
  ���̃��R�[�h�ɂ‚��ẴV�[�P���X�ԍ��B

MAC
 

SecurityParameters.mac_algorithm
�ɂ���ċK�肳�ꂽ MAC �A���S���Y���B

�u���� MAC �́A�Í����O�Ɍv�Z�����B���̃X�g���[���Í��́A���� MAC ���܂ރu���b�N�S�̂��Í������邱�Ɓv�ɒ��ӁB(RC4 �̂悤��) �������isynchronization�j�x�N�g�����g��Ȃ��X�g���[���Í��ɂ‚��āA���郌�R�[�h�̏I�[����̃X�g���[���Í���Ԃ́A�P�Ɉȍ~�̃p�P�b�g��Ŏg����B���� cipher suite �� TLS_NULL_WITH_NULL_NULL �ł���ꍇ�A�Í����́A���� identity ���삩�琬��B�i���Ȃ킿�A���̃f�[�^�́A�Í������ꂸ�A�����āA���� MAC ���́A�[���ł���A�uMAC �́A�g���Ȃ����Ɓv���Ӗ�����B�jnull �ƃX�g���[���Í��̗����ɂ‚��āATLSCiphertext.length �́ATLSCompressed.length �{ SecurityParameters.mac_length �ł���B

6.2.3.2. CBC �u���b�N�� English

�i3DES �������� AES�̂悤�ȁj�u���b�N�Í��ɂ‚��āA���̈Í�������� MAC �֐��́ATLSCompressed.fragment �\���́i���^����jblock TLSCiphertext.fragment �\���̂ɕϊ�����B

   struct {
       opaque IV[SecurityParameters.record_iv_length];
       block-ciphered struct {
           opaque content[TLSCompressed.length];
           opaque MAC[SecurityParameters.mac_length];
           uint8 padding[GenericBlockCipher.padding_length];
           uint8 padding_length;
       };
   } GenericBlockCipher;

���� MAC �́A 6.2.3.1���ɋL�q����Ă���悤�ɐ��������B

IV
  IV�iInitialization Vector�j�́A�����_���ɑI��������K�v������iSHOULD�j�B�����āA�\���s�\�łȂ�����Ȃ�Ȃ��iMUST�j�B�uTLS �� 1.1 ���O�̃o�[�W�����ɂ����āAIV �t�B�[���h�͖����������ƂƁA���R�[�h�̍Ō�� ciphertext block�i(the "CBC residue"�j���A���� IV �Ƃ��Ďg���Ă������Ɓv�ɒ��ӁB����́A[CBCATT] ���ɋL�q���ꂽ�U����\�h���邽�߂ɕύX���ꂽ�B�u���b�N�Í��ɂ‚��āAIV ���́ASecurityParameters.record_iv_length �̒����ł���B����́ASecurityParameters.block_size �Ɠ������B

padding
 

���� plaintext �̒������A���̃u���b�N�Í��̃u���b�N�̒����̐����{�ƂȂ邱�Ƃ��������邽�߂ɉ�����ꂽ Padding�B���� padding �́A TLSCiphertext.length ���K�{�́A���̃u���b�N���̔{���ƂȂ����A255 byte ������Ƃ��邠���钷���ł����”\��������iMAY�j�B�K�v�s�Œ��Ȓ����ȏ�̒����́A�������ꂽ���b�Z�[�W�̒����̉�͂Ɋ�Â��v���g�R���ɑ΂���U�������s������ifrustrate�j���߂Ɋ��]�����”\��������B���� padding �f�[�^�x�N�g�����̊e uint8 �́A���� padding ���l�Ŗ��߂��Ȃ�����Ȃ�Ȃ��iMUST�j�B���̎�M�҂́A���� padding ���`�F�b�N���Ȃ�����Ȃ�Ȃ��iMUST�j�B�����āApadding �G���[���������߂� bad_record_mac alert ���g��Ȃ�����Ȃ�Ȃ��iMUST�j�B


padding_length
 

padding length �́AGenericBlockCipher �\���̂̑S�����A���� cipher �̃u���b�N���̔{���ł�����̂łȂ�����Ȃ�Ȃ��iMUST�j�B���K�́iLegal�j�l�́A�[������ 255 �ɓn��B���̒����́Apadding_length �t�B�[���h���̂����� padding �t�B�[���h�̒������K�肷��B

�Í������ꂽ�f�[�^���iTLSCiphertext.length�j�́ASecurityParameters.block_length�ATLSCompressed.length�ASecurityParameters.mac_length ����� padding_length ���Ɠ���ȏ�̍��ڂł���B

��F �u���b�N���� 8 byte �ł���A���� content ���iTLSCompressed.length�j�� 61 byte �ł���A���A���� MAC ���� 20 byte �ł���ꍇ�Apadding �O�̒����́A82 byte�i����́AIV ���܂܂Ȃ��j�ƂȂ�B����䂦�A�p�f�B���O�� modulo 8 �́A���̑����� 8 byte �i���̃u���b�N���j�̔{���Ɠ������Ȃ�悤�ɂ��邽�߂� 6 �Ɠ������Ȃ���΂Ȃ�Ȃ��B���̃p�f�B���O���́A6, 14, 22 �� 254 �܂łł���”\��������B���̃p�f�B���O�����ŏ��l�i�K�� 6�j�ł������ꍇ�A���̃p�f�B���O�́A�e�X 6 �Ƃ����l�����߂� 6 byte �ƂȂ�B����䂦�A�u���b�N�Í����O�� GenericBlockCipher �̍Ō�� 8 octet �́Axx 06 06 06 06 06 06 06 �ƂȂ�A�����ŁAxx �́A���� MAC �̍Ō�� octet �ł���B

���ӁF CBC�iCipher Block Chaining�j���[�h�̃u���b�N�Í��ɂ‚��āA�u���̃��R�[�h���A�����Ȃ� ciphertext �̑O�ɒm���Ă��� plaintext �S�̂��]������邱�Ɓv�́A�d�v�ł���B�����Ȃ���΁A���̍U���҂� [CBCATT] ���ɋL�q���ꂽ�U������‰”\��������B

������̒��ӁF Canvel �� [CBCTIME] �́A���� MAC ���v�Z���邽�߂ɗv���鎞�ԂɊ�Â� CBC padding �ɂ‚��Ẵ^�C�~���O�U�������؂����B���̍U����h�����߂ɁA�����́A�u���R�[�h�������Ԃ́A���� padding �����������ۂ��Ɋւ�炸�A�{���I�ɂ͓������Ɓv���m�ۂ��Ȃ�����Ȃ�Ȃ��iMUST�j�B��ʂɁA������s���őP�̕��@�́A���Ƃ����� padding ���s���ł���A���̂Ƃ��̂݃p�P�b�g�����p����ꍇ�ł��A���� MAC ���v�Z���邱�Ƃł���B�Ⴆ�΁A���� pad ������Ă���悤�Ɍ�����ꍇ�A���̎����́A�[������ pad �ƌ��Ȃ��A���� MAC ���v�Z����”\��������B����́A�����ȃ^�C�~���O�`���l�����c���B�Ȃ��Ȃ�΁AMAC �̐��\�́A���̃f�[�^�t���O�����g�̑傫���ɁA������x�A�ˑ����邩��ł���B�������A���݂��� MAC �̑傫�ȃu���b�N�T�C�Y�ƁA���̃^�C�~���O�M���̏������ɋN�����āA�U������邱�Ƃ́A�\���ɑ傫�����Ƃ͐M�����Ă��Ȃ��B

6.2.3.3. AEAD �� English

AEAD [AEAD] �Í��i��F [CCM] �������� [GCM]�j�ɂ‚��āAAEAD �֐��́ATLSCompressed.fragment �\���̂Ɂi�^����j AEAD TLSCiphertext.fragment �\���̂���i�^�Ɂj�ϊ�����B

   struct {
      opaque nonce_explicit[SecurityParameters.record_iv_length];
      aead-ciphered struct {
          opaque content[TLSCompressed.length];
      };
   } GenericAEADCipher;

AEAD ciphers �́A[AEAD] �� 2.1 �� �ɋL�q����Ă���悤�ɁAinput �Ƃ��āA�P��̌��Anonce�Aplaintext ����єF�؁iauthentication�j�`�F�b�N���Ɋ܂߂��� "additional data" �����B���̌��́Aclient_write_key ���Aserver_write_key �̂����ꂩ�ł���BMAC ���́A�g���Ȃ��B

�e AEAD cipher suite �́A�u�ǂ̂悤�ɁA���� AEAD ����ɒ񋟂���� nonce �́A�\�z����邩�H�v����� �uGenericAEADCipher.nonce_explicit part �̒����́A�ǂꂾ�����H�v���K�肵�Ȃ�����Ȃ�Ȃ��iMUST�j�B�����̏ꍇ�ɂ����āA[AEAD] �� 3.2.1 �� �ɋL�q����Ă��镔���I�ɖَ��I�ȁiimplicit�j nonce �e�N�j�b�N���i�����I�iexplicit�j�ȕ����̒����ł��� record_iv_length �Ƌ��Ɂj�g�����Ƃ́A�K�؂ł���B���̏ꍇ�A���َ̖��I�iimplicit�j�ȕ����́A�i6.3 ���ɋL�q����Ă���悤�Ɂjkey_block ���� client_write_iv ����� server_write_iv �Ƃ��Ď擾������K�v������iSHOULD�j�B�����āA���̖��������́AGenericAEAEDCipher.nonce_explicit ���Ɋ܂߂���B

���� plaintext �́ATLSCompressed.fragment �ł���B

��X�� additional_data �ƕ\�L���Ă���lj��I�ȔF�؂��ꂽ�iauthenticated�j�f�[�^�́A���L�̂悤�ɒ�`�����B�F

   additional_data = seq_num + TLSCompressed.type +
                     TLSCompressed.version + TLSCompressed.length;

�����ŁA"+" �́A�A���iconcatenation�j���Ӗ�����B

aead_output �́A���� AEAD �Í�������ɂ�� ciphertext output ���琬��B���̒����́A��ʂɁATLSCompressed.length ���傫���Ȃ邪�AAEAD cipher �ɂ���ĕω�����ʂɂ��B���̈Í��́Apadding ��g�ݍ��ށiincorporate�j�”\��������̂ŁA�I�[�o�[�w�b�h�̗ʂ́A�قȂ� TLSCompressed.length �l�ɉ����đ��l�ł���”\��������B�e AEAD cipher �́A1024 byte ���傫�Ȋg�������o���Ă��Ȃ�Ȃ��iMUST NOT�j�B
Symbolically,

   AEADEncrypted = AEAD-Encrypt(write_key, nonce, plaintext, additional_data)

�������A���؂��邽�߂ɁA���̈Í��icipher�j�́Ainput �Ƃ��āA���̌��Anonce�A"additional_data" ����� AEADEncrypted �l��v����B���� output �́Aplaintext ���A���邢�́A���������s�������Ƃ������G���[�̂����ꂩ�ł���B�ʁX�� integrity �`�F�b�N�͖����B���Ȃ킿�A���L�̂Ƃ���B�F

   TLSCompressed.fragment = AEAD-Decrypt(write_key, nonce,
                                         AEADEncrypted,
                                         additional_data)

���̕��������s����ꍇ�Afatal bad_record_mac alert ����������Ȃ�����Ȃ�Ȃ��iMUST�j�B

6.3. �� Calculation English

���R�[�h�v���g�R���́A���݂̃R�l�N�V������Ԃɂ���ėv������錮�iAppendix A.6�Q�Ɓj���A�n���h�V�F�C�N�v���g�R���ɂ���Ē񋟂����Z�L�����e�B�p�����[�^���琶�����邽�߂̃A���S���Y����v����B

master secret �́Asecure bytes �̃V�[�P���X�Ɋg�������B���ɁA����́Aclient write MAC ���Aserver write MAC ���Aclient write �Í����������
server write �Í������ɕ��������B�����̊e�X�́A���̏��ɁA���̃o�C�g�V�[�P���X���琶�������BUnused �l�́A��ł���BAEAD cipher �ɂ́Aclient write IV ����� server write IV�i6.2.3.3 �����Q�Ɓj��lj��I�ɗv������”\����������̂�����B

������� MAC �������������Ƃ��A���� master secret �́A�G���g���s�[�̌���Ƃ��Ďg����B

���̌��Ƃ���f�ނ𐶐����邽�߂ɁA�\���� output �����������܂ʼn��L���v�Z����B

   key_block = PRF(SecurityParameters.master_secret,
                   "key expansion",
                   SecurityParameters.server_random +
                   SecurityParameters.client_random);

�����āAkey_block �́A���L�̂悤�ɕ��������B�F

   client_write_MAC_key[SecurityParameters.mac_key_length]
   server_write_MAC_key[SecurityParameters.mac_key_length]
   client_write_key[SecurityParameters.enc_key_length]
   server_write_key[SecurityParameters.enc_key_length]
   client_write_IV[SecurityParameters.fixed_iv_length]
   server_write_IV[SecurityParameters.fixed_iv_length]

���݁Aclient_write_IV �� server_write_IV �́A[AEAD] �� 3.2.1 �ߒ��ɋL�q����Ă���悤�ɖَ��I�iimplicit�jnonce �e�N�j�b�N�p�ɂ̂ݐ��������B

������̒��ӁF �ł��f�ނ�v����A���ݒ�`����Ă��� cipher suite �́AAES_256_CBC_SHA256 �ł���B����́A�v 128 byte �̌��Ƃ���f�ޗp�� 2 x 32 byte ������� 2 x 32 byte MAC ����v����B

�@


5 <- index -> 7

�@