Share secret non-interactively in a verifiable way
After looking a bit more into it I found a solution which I think should work.
I combined ECDH with AES todo the following:
Message Generation

I generate a new Elliptic Curve key pair (sesPk, sesSk)
I generate a key for each receiver: key_i = ECDH(sesSk, receiverPk_i)
I generate a message for each receiver: msg_i = AesEnc(key_i, sesSk||secret)
I combine the messages: msg =  sesPk||msg_0||...||msg_n

Secret Extraction

I generate my key: key_i = ECDH(mySk, sesPk)
I decrypt my message: sesSk||secret = AesDec(key_i, msg_i)

Secret Verification

I generate all keys: key_i = ECDH(sesSk, receiverPk_i)
I decrypt all messages: sesSk_i||secret_i = AesDec(key_i, msg_i)
I verify that all received the same secret: secret == secret_0 == ... == secret_n
I verify that all used the same session key: sesSk == sesSk_0 == ... == sesSk_n

Reminder

msg is shared over a blockchain so all receiver see the message or none does
receiverPks are known beforehand and thus are not included in msg but they could if necessary

If someone sees a weakness in this approach please share in the comments.