// Module included in the following assemblies:
//
// assembly-using-the-user-operator.adoc
// assembly-configuring-kafka-listeners.adoc

[id='con-scram-sha-authentication-{context}']
= SCRAM-SHA authentication

SCRAM (Salted Challenge Response Authentication Mechanism) is an authentication protocol that can establish mutual authentication using passwords. {ProductName} can configure Kafka to use SASL SCRMA-SHA-512 to provide authentication on both unencrypted and TLS-encrypted client connections. TLS authentication is always used internally between Kafka brokers and Zookeeper nodes. When used with a TLS client connection, the TLS protocol provides encryption, but is not used for authentication.

The following properties of SCRAM make it safe to use SCRAM-SHA even on unencrypted connections:

* The passwords are not sent in the clear over the communication channel.
Instead the client and the server are each challenged by the other to offer proof that they know the password of the authenticating user.

* The server and client each generate a new challenge one each authentication exchange. 
This means that the exchange is resilient against replay attacks.

== Supported SCRAM credentials

{ProductName} supports SCRMA-SHA-512 only. 
When a `KafkaUser.spec.authentication.type` is configured with `scram-sha-512` the User Operator will generate a random 12 character password consisting of upper and lowercase ASCII letters and numbers. 

== When to use SCRAM-SHA authentication for clients

SCRAM-SHA is recommended for authenticating Kafka clients when:

* The client supports authentication using SCRAM-SHA-512
* It is necessary to use passwords rather than the TLS certificates
* When you want to have authentication for unencrypted communication

