Annotate places depending on strong random numbers
This commit adds a new wrapper, random_get_bytes(), that is currently defined to use os_get_random() as is. The places using random_get_bytes() depend on the returned value being strong random number, i.e., something that is infeasible for external device to figure out. These values are used either directly as a key or as nonces/challenges that are used as input for key derivation or authentication. The remaining direct uses of os_get_random() do not need as strong random numbers to function correctly.
This commit is contained in:
parent
1bdb7ab3af
commit
3642c4313a
38 changed files with 123 additions and 63 deletions
|
@ -17,6 +17,7 @@
|
|||
#include "common.h"
|
||||
#include "crypto/sha256.h"
|
||||
#include "crypto/crypto.h"
|
||||
#include "crypto/random.h"
|
||||
#include "eap_common/eap_sim_common.h"
|
||||
#include "eap_server/eap_i.h"
|
||||
#include "eap_server/eap_sim_db.h"
|
||||
|
@ -440,7 +441,7 @@ static struct wpabuf * eap_aka_build_reauth(struct eap_sm *sm,
|
|||
|
||||
wpa_printf(MSG_DEBUG, "EAP-AKA: Generating Re-authentication");
|
||||
|
||||
if (os_get_random(data->nonce_s, EAP_SIM_NONCE_S_LEN))
|
||||
if (random_get_bytes(data->nonce_s, EAP_SIM_NONCE_S_LEN))
|
||||
return NULL;
|
||||
wpa_hexdump_key(MSG_MSGDUMP, "EAP-AKA: NONCE_S",
|
||||
data->nonce_s, EAP_SIM_NONCE_S_LEN);
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include "crypto/aes_wrap.h"
|
||||
#include "crypto/sha1.h"
|
||||
#include "crypto/tls.h"
|
||||
#include "crypto/random.h"
|
||||
#include "eap_common/eap_tlv_common.h"
|
||||
#include "eap_common/eap_fast_common.h"
|
||||
#include "eap_i.h"
|
||||
|
@ -642,7 +643,7 @@ static struct wpabuf * eap_fast_build_crypto_binding(
|
|||
binding->version = EAP_FAST_VERSION;
|
||||
binding->received_version = data->peer_version;
|
||||
binding->subtype = EAP_TLV_CRYPTO_BINDING_SUBTYPE_REQUEST;
|
||||
if (os_get_random(binding->nonce, sizeof(binding->nonce)) < 0) {
|
||||
if (random_get_bytes(binding->nonce, sizeof(binding->nonce)) < 0) {
|
||||
wpabuf_free(buf);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -692,7 +693,7 @@ static struct wpabuf * eap_fast_build_pac(struct eap_sm *sm,
|
|||
struct eap_tlv_result_tlv *result;
|
||||
struct os_time now;
|
||||
|
||||
if (os_get_random(pac_key, EAP_FAST_PAC_KEY_LEN) < 0 ||
|
||||
if (random_get_bytes(pac_key, EAP_FAST_PAC_KEY_LEN) < 0 ||
|
||||
os_get_time(&now) < 0)
|
||||
return NULL;
|
||||
wpa_hexdump_key(MSG_DEBUG, "EAP-FAST: Generated PAC-Key",
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include "includes.h"
|
||||
|
||||
#include "common.h"
|
||||
#include "crypto/random.h"
|
||||
#include "eap_server/eap_i.h"
|
||||
#include "eap_common/eap_gpsk_common.h"
|
||||
|
||||
|
@ -120,7 +121,7 @@ static struct wpabuf * eap_gpsk_build_gpsk_1(struct eap_sm *sm,
|
|||
|
||||
wpa_printf(MSG_DEBUG, "EAP-GPSK: Request/GPSK-1");
|
||||
|
||||
if (os_get_random(data->rand_server, EAP_GPSK_RAND_LEN)) {
|
||||
if (random_get_bytes(data->rand_server, EAP_GPSK_RAND_LEN)) {
|
||||
wpa_printf(MSG_ERROR, "EAP-GPSK: Failed to get random data");
|
||||
eap_gpsk_state(data, FAILURE);
|
||||
return NULL;
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include "includes.h"
|
||||
|
||||
#include "common.h"
|
||||
#include "crypto/random.h"
|
||||
#include "eap_i.h"
|
||||
#include "eap_common/chap.h"
|
||||
|
||||
|
@ -52,7 +53,7 @@ static struct wpabuf * eap_md5_buildReq(struct eap_sm *sm, void *priv, u8 id)
|
|||
struct eap_md5_data *data = priv;
|
||||
struct wpabuf *req;
|
||||
|
||||
if (os_get_random(data->challenge, CHALLENGE_LEN)) {
|
||||
if (random_get_bytes(data->challenge, CHALLENGE_LEN)) {
|
||||
wpa_printf(MSG_ERROR, "EAP-MD5: Failed to get random data");
|
||||
data->state = FAILURE;
|
||||
return NULL;
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
#include "common.h"
|
||||
#include "crypto/ms_funcs.h"
|
||||
#include "crypto/random.h"
|
||||
#include "eap_i.h"
|
||||
|
||||
|
||||
|
@ -109,7 +110,7 @@ static struct wpabuf * eap_mschapv2_build_challenge(
|
|||
size_t ms_len;
|
||||
|
||||
if (!data->auth_challenge_from_tls &&
|
||||
os_get_random(data->auth_challenge, CHALLENGE_LEN)) {
|
||||
random_get_bytes(data->auth_challenge, CHALLENGE_LEN)) {
|
||||
wpa_printf(MSG_ERROR, "EAP-MSCHAPV2: Failed to get random "
|
||||
"data");
|
||||
data->state = FAILURE;
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include "includes.h"
|
||||
|
||||
#include "common.h"
|
||||
#include "crypto/random.h"
|
||||
#include "eap_server/eap_i.h"
|
||||
#include "eap_common/eap_pax_common.h"
|
||||
|
||||
|
@ -82,7 +83,7 @@ static struct wpabuf * eap_pax_build_std_1(struct eap_sm *sm,
|
|||
|
||||
wpa_printf(MSG_DEBUG, "EAP-PAX: PAX_STD-1 (sending)");
|
||||
|
||||
if (os_get_random(data->rand.r.x, EAP_PAX_RAND_LEN)) {
|
||||
if (random_get_bytes(data->rand.r.x, EAP_PAX_RAND_LEN)) {
|
||||
wpa_printf(MSG_ERROR, "EAP-PAX: Failed to get random data");
|
||||
data->state = FAILURE;
|
||||
return NULL;
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include "common.h"
|
||||
#include "crypto/sha1.h"
|
||||
#include "crypto/tls.h"
|
||||
#include "crypto/random.h"
|
||||
#include "eap_i.h"
|
||||
#include "eap_tls_common.h"
|
||||
#include "eap_common/eap_tlv_common.h"
|
||||
|
@ -414,7 +415,7 @@ static struct wpabuf * eap_peap_build_phase2_tlv(struct eap_sm *sm,
|
|||
#endif /* EAP_SERVER_TNC */
|
||||
|
||||
if (eap_peap_derive_cmk(sm, data) < 0 ||
|
||||
os_get_random(data->binding_nonce, 32)) {
|
||||
random_get_bytes(data->binding_nonce, 32)) {
|
||||
wpabuf_free(buf);
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
#include "common.h"
|
||||
#include "crypto/aes_wrap.h"
|
||||
#include "crypto/random.h"
|
||||
#include "eap_common/eap_psk_common.h"
|
||||
#include "eap_server/eap_i.h"
|
||||
|
||||
|
@ -66,7 +67,7 @@ static struct wpabuf * eap_psk_build_1(struct eap_sm *sm,
|
|||
|
||||
wpa_printf(MSG_DEBUG, "EAP-PSK: PSK-1 (sending)");
|
||||
|
||||
if (os_get_random(data->rand_s, EAP_PSK_RAND_LEN)) {
|
||||
if (random_get_bytes(data->rand_s, EAP_PSK_RAND_LEN)) {
|
||||
wpa_printf(MSG_ERROR, "EAP-PSK: Failed to get random data");
|
||||
data->state = FAILURE;
|
||||
return NULL;
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include "includes.h"
|
||||
|
||||
#include "common.h"
|
||||
#include "crypto/random.h"
|
||||
#include "eap_server/eap_i.h"
|
||||
#include "eap_common/eap_sake_common.h"
|
||||
|
||||
|
@ -166,7 +167,7 @@ static struct wpabuf * eap_sake_build_challenge(struct eap_sm *sm,
|
|||
|
||||
wpa_printf(MSG_DEBUG, "EAP-SAKE: Request/Challenge");
|
||||
|
||||
if (os_get_random(data->rand_s, EAP_SAKE_RAND_LEN)) {
|
||||
if (random_get_bytes(data->rand_s, EAP_SAKE_RAND_LEN)) {
|
||||
wpa_printf(MSG_ERROR, "EAP-SAKE: Failed to get random data");
|
||||
data->state = FAILURE;
|
||||
return NULL;
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include "includes.h"
|
||||
|
||||
#include "common.h"
|
||||
#include "crypto/random.h"
|
||||
#include "eap_server/eap_i.h"
|
||||
#include "eap_common/eap_sim_common.h"
|
||||
#include "eap_server/eap_sim_db.h"
|
||||
|
@ -232,7 +233,7 @@ static struct wpabuf * eap_sim_build_reauth(struct eap_sm *sm,
|
|||
|
||||
wpa_printf(MSG_DEBUG, "EAP-SIM: Generating Re-authentication");
|
||||
|
||||
if (os_get_random(data->nonce_s, EAP_SIM_NONCE_S_LEN))
|
||||
if (random_get_bytes(data->nonce_s, EAP_SIM_NONCE_S_LEN))
|
||||
return NULL;
|
||||
wpa_hexdump_key(MSG_MSGDUMP, "EAP-SIM: NONCE_S",
|
||||
data->nonce_s, EAP_SIM_NONCE_S_LEN);
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include <sys/un.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "crypto/random.h"
|
||||
#include "eap_common/eap_sim_common.h"
|
||||
#include "eap_server/eap_sim_db.h"
|
||||
#include "eloop.h"
|
||||
|
@ -830,7 +831,7 @@ static char * eap_sim_db_get_next(struct eap_sim_db_data *data, char prefix)
|
|||
char *id, *pos, *end;
|
||||
u8 buf[10];
|
||||
|
||||
if (os_get_random(buf, sizeof(buf)))
|
||||
if (random_get_bytes(buf, sizeof(buf)))
|
||||
return NULL;
|
||||
id = os_malloc(sizeof(buf) * 2 + 2);
|
||||
if (id == NULL)
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
#include "common.h"
|
||||
#include "crypto/dh_groups.h"
|
||||
#include "crypto/random.h"
|
||||
#include "ikev2.h"
|
||||
|
||||
|
||||
|
@ -1100,7 +1101,7 @@ static struct wpabuf * ikev2_build_sa_init(struct ikev2_initiator_data *data)
|
|||
data->i_spi, IKEV2_SPI_LEN);
|
||||
|
||||
data->i_nonce_len = IKEV2_NONCE_MIN_LEN;
|
||||
if (os_get_random(data->i_nonce, data->i_nonce_len))
|
||||
if (random_get_bytes(data->i_nonce, data->i_nonce_len))
|
||||
return NULL;
|
||||
wpa_hexdump(MSG_DEBUG, "IKEV2: Ni", data->i_nonce, data->i_nonce_len);
|
||||
|
||||
|
@ -1148,7 +1149,7 @@ static struct wpabuf * ikev2_build_sa_auth(struct ikev2_initiator_data *data)
|
|||
if (data->shared_secret == NULL)
|
||||
return NULL;
|
||||
data->shared_secret_len = 16;
|
||||
if (os_get_random(data->shared_secret, 16))
|
||||
if (random_get_bytes(data->shared_secret, 16))
|
||||
return NULL;
|
||||
} else {
|
||||
os_free(data->shared_secret);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue