How about…
{.class #id key="value" info="Arbitrary info string"}
This provides maximum flexibility for future extensions, since any info string could be applied in any location where attribute blocks (or attribute references) can be applied.
It’s additional markup, but it keeps things future-compatible – consistent attribute syntax will almost inevitably be added to CommonMark core or a standard extension.