Currently the owner address is used for the verification method and key agreement:
pubkey, err := AlgorandAddressToEd25519(ownerAddr)
if err == nil {
x25519Key, err := Ed25519ToX25519(pubkey)
if err == nil {
keyAgreements = append(keyAgreements, VerificationMethod{
ID: didID + "#x25519-owner",
Type: KeyTypeX25519,
Controller: didID,
PublicKeyMultibase: X25519ToMultibase(x25519Key),
})
}
}
This can be problematic for rekeyed accounts because the the owner address may be rekeyed. This means either
A) The owner no longer has the respective private key
or
B) A malicious actor that now has the original private key can incorrectly verify themselves as the DID owner
I think the resolver should instead use algod to get the AuthAddr for ownerAddr and use that for verification methods.
Additionally an Algorand address may not correspond to a valid x25519 key if the Address comes from a soft-derived HD account since the private scalar is not properly clamped according to the standard. They may still be able to do a DH exchange with that unclamped scalar, but it will not be following the x25519 standard and compatibility with external libs may be a mixed bag.
There's also the problem of knowing whether an address is an app or lsig but this is less of a problem since no one will have the corresponding private key.
Honestly I would say if someone wants key exchange methods on their DID that should be a custom field not associated with the address due to the above complexities. At the very least, however, I would recommend using the AuthAddr
Currently the owner address is used for the verification method and key agreement:
This can be problematic for rekeyed accounts because the the owner address may be rekeyed. This means either
A) The owner no longer has the respective private key
or
B) A malicious actor that now has the original private key can incorrectly verify themselves as the DID owner
I think the resolver should instead use algod to get the AuthAddr for
ownerAddrand use that for verification methods.Additionally an Algorand address may not correspond to a valid x25519 key if the Address comes from a soft-derived HD account since the private scalar is not properly clamped according to the standard. They may still be able to do a DH exchange with that unclamped scalar, but it will not be following the x25519 standard and compatibility with external libs may be a mixed bag.
There's also the problem of knowing whether an address is an app or lsig but this is less of a problem since no one will have the corresponding private key.
Honestly I would say if someone wants key exchange methods on their DID that should be a custom field not associated with the address due to the above complexities. At the very least, however, I would recommend using the AuthAddr