H1 = HMAC(Salt1, Password)
H2 = HMAC(Salt2, H1)
---send to Company---
H3 = HMAC(Salt2, H2)
H4 = HMAC(Salt3, H3)
---send back to customer---
Compare H4 with known value
Ref to technical white paper: https://taplink.co/wp-content/uploads/2016/10/TapLink_Blind_... (I'm treating the AppID as a Hash, as I'm ignore the look up stage for the massive salt).Effectively your process can be described as:
Hash = HMAC( Salt3, HMAC( Salt2, HMAC( Salt2, HMAC( Salt1, Password))))
But with network transmission?!?!Multiple salts != more security
https://stackoverflow.com/questions/12753062/multiple-salts-...
https://programmers.stackexchange.com/questions/115406/is-it...
Also the step of shipping the final hash back to the customer is SO dangerous. TLS/SSH is secure but one miss-configuration/bug/0-day and you leak dozens of credentials.
This is a really stupid model. Furthermore salts larger then the final output side offer no additional security. If you have 256bits of output, you only need 256nits of input. Larger inputs technically risk reducing the entropy of the final output.
This whole security model assumes taplink.co will never get MITM. This can't be guaranteed. This also means your whole system goes down when taplink.co is out.