
iMessage가 메시지를 안전하게 주고받는 방법
사용자는 이메일 주소 또는 이름을 입력하여 새로운 iMessage 대화를 시작할 수 있습니다. 전화번호 또는 이메일 주소를 입력하면 기기가 Apple IDS(Identity Service)에 연결하여 해당 번호 또는 주소와 관련한 모든 기기에 대한 공개 키와 APNS 주소를 가져옵니다. 사용자가 이름을 입력하면 기기는 우선 사용자의 연락처 앱을 사용하여 해당 이름과 관련한 전화번호와 이메일 주소를 수집한 다음 IDS에서 공개 키와 APNS 주소를 가져옵니다.
사용자가 보내는 메시지는 수신자의 각 기기에서 개별적으로 암호화됩니다. 수신하는 기기의 공개 암호화 키 및 서명 키는 IDS에서 가져옵니다. 또한, 전송하는 기기는 각각의 수신하는 기기에 대해 무작위로 88비트 값을 생성하고 HMAC-SHA256 키로 사용하여 전송자와 수신자의 공개 키와 평문에서 파생된 40비트 값을 구성합니다. 88비트 값과 40비트 값을 조합하여 128비트 키가 만들어지고 이 키는 CTR(Counter) 모드에서 AES에 사용되어 메시지를 암호화합니다. 40비트 값은 수신하는 쪽에서 암호화 해제된 평문의 무결성을 확인하기 위해 사용합니다. 메시지별 AES 키는 RSA‑OAEP를 사용하여 수신하는 기기의 공개 키로 암호화됩니다. 그리고 암호화된 메시지 텍스트와 암호화된 메시지 키의 조합은 SHA-1로 해시되며, 해당 해시는 전송하는 기기의 개인 서명 키를 사용하여 ECDSA(Elliptic Curve Digital Signature Algorithm)로 서명됩니다. iOS 13 이상, iPadOS 13.1 이상에서 기기는 RSA 암호화 대신 ECIES(Elliptic Curve Integrated Encryption Scheme) 암호화를 사용할 수 있습니다.
결과로 나온 메시지는 수신하는 기기당 하나이며 암호화된 메시지 텍스트, 암호화된 메시지 키와 보낸 사람의 디지털 서명으로 구성됩니다. 그런 다음 전송을 위해 APNS로 발송됩니다. 타임스탬프나 APNS 라우팅 정보와 같은 메타데이터는 암호화되지 않습니다. APNS와의 통신은 전방향 안전 TLS 채널을 사용하여 암호화됩니다.
APNS는 iOS 또는 iPadOS 버전에 따라 최대 4KB 또는 16KB의 크기의 메시지만 릴레이할 수 있습니다. 메시지 텍스트가 너무 길거나 사진과 같은 첨부 파일이 포함되어 있는 경우 첨부 파일은 CTR 모드의 AES와 무작위로 생성된 256비트 키로 암호화되어 iCloud에 업로드됩니다. 첨부 파일의 AES 키, 해당 URI(Uniform Resource Identifier) 및 암호화된 형태의 SHA-1 해시는 아래의 다이어그램에 나타난 대로 일반 iMessage 암호화를 통해 기밀성과 무결성을 보호하면서 수신자에게 iMessage 콘텐츠로 전송됩니다.

그룹 대화에서는 각 수신자와 수신하는 기기가 이 과정을 반복합니다.
수신하는 쪽의 각 기기는 APNS에서 메시지 사본을 받고 필요한 경우 iCloud에서 첨부 파일을 검색합니다. 가능한 경우, 보낸 사람의 전화번호 또는 이메일 주소가 수신자의 연락처와 일치하면 이름이 표시됩니다.
모든 푸시 알림과 마찬가지로 메시지는 전송되는 경우 APNS에서 삭제됩니다. 그러나 다른 APNS 알림과 달리 iMessage 메시지는 오프라인 기기에 전송을 위해 대기합니다. 메시지는 Apple 서버에 최대 30일 동안 저장됩니다.