6.1. �R�l�N�V������� EnglishTLS ���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.2. ���R�[�h�w EnglishTLS �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.1. Fragmentation EnglishTLS ���R�[�h�w�́Auninterpreted �f�[�^��C�ӂ̒����̋�łȂ��u���b�N���̍��ʑw������B
6.2.2. ���R�[�h�̈��k����� Decompression 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
���ׂẴ��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
6.2.3.1. Null �������͕W���X�g���[���Í� 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.2. CBC �u���b�N�Í� 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.3. AEAD �Í� 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.3. �� Calculation EnglishAEAD [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
���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
�@
�@