Есть ли недостатки безопасности или другие вещи, которые я забыл учесть?
Да, у GCM есть проблемы с безопасностью из-за того, как SRTP хотел бы его использовать.
SRTP спроектирован так, чтобы иметь как можно более низкую нагрузку на полосу пропускания (то есть размер пакета); SRTP иногда используется в беспроводной сети, и размер пакета здесь довольно высок. IIRC, единственная полоса пропускания, которую добавляет SRTP, — это тег целостности (IV, если для режима требуется тот, который никогда не повторяется, может быть функцией позиции в потоке, которая уже включена в незашифрованный раздел пакета); мы хотели бы уменьшить тег, чтобы он был как можно короче (как для снижения стоимости, так и для SRTP, когда кто-то вводит один фиктивный пакет, это не так уж плохо - для использования аудио они могут модифицировать 20 мс из голосовое соединение на не слишком высоком уровне ($<10^{-6}$) вероятность, и это считалось допустимым для этого варианта использования).
Когда мы добираемся до GCM, у нас возникает проблема с короткими тегами. GCM имеет это свойство: если у нас есть зашифрованное сообщение GCM с IV, зашифрованный текст/тег $(IV,С,Т)$ и кто-то находит фиктивное сообщение $(IV, С', Т')$ это принято (примечание: использовался тот же IV, зашифрованный текст и тег были изменены произвольно), то для любого будущего зашифрованного сообщения $(IV", C", T")$, то сообщение $(IV", C" \oplus C \oplus C', T" \oplus T \oplus T')$ также будет принято. То есть, обнаружив единственную подделку, злоумышленник может с этого момента вводить подделки.
И, если у вас короткий тег, то у злоумышленника есть приличные шансы найти принятое поддельное сообщение. $(IV, С', Т')$ просто угадывая различные $Т'$ ценности.
Единичная подделка считалась допустимой; позволяя злоумышленнику генерировать непрерывный поток подделок, в меньшей степени. С GCM мы можем избежать этой проблемы, используя длинный тег (где вероятность его случайного угадывания достаточно мала), однако варианты использования SRTP не любят длинные теги.
HMAC не имеет этого свойства; если злоумышленник обнаружит подделку $(С', Т')$ (У HMAC нет IV), это не помогает ему создавать какие-либо подделки в будущем.