Identidad digital
¿Cómo proteger tu identidad digital con blockchain?
Caso práctico: identidad digital
Servicios financieros
¿Cómo blockchain soluciona problemas financieros?
Caso práctico: servicios financieros
Protección de activos digitales
¿Cómo proteger tus activos con blockchain?
Caso práctico: activos digitales
Cadena de suministro
¿Cómo hacer cadenas de suministro más eficientes con blockchain?
Caso práctico: cadena de suministro
Ciberseguridad
Ciberseguridad y blockchain
Caso práctico: ciberseguridad
Cierre
Continúa aprendiendo
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Los contratos inteligentes también pueden ser utilizados para llevar un registro de eventos o alertas importantes de un sistema principal. El primer paso de cualquier sistema de seguridad informática es llevar un registro de lo que está pasando para luego poder hacer un análisis de dichos registros.
A través de un contrato inteligente, se podría crear un log de eventos, accesos, errores y demás información que sucede en un sistema tradicional.
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
contract Event {
// Eventos de creación de nuevo evento y alerta
event newEventCreated(string _event);
event newAlertCreated(address node, string message, Risk risk);
// Estructura de las alertas
struct Alert {
string message;
Risk risk;
address node;
}
// Nivel de riesgo de una alerta
enum Risk {
HIGH,
MEDIUM,
LOW
}
// Array de alertas importantes
Alert[] public alerts;
// Mapping de eventos por cuenta
mapping(address => mapping(uint256 => string)) public events;
// Mapping para llevar un control de la cantidad de eventos por cuenta
mapping(address => uint256) public eventsCounter;
// Límite de eventos por cuenta y owner del contrato
uint256 public threshold;
address private owner;
modifier onlyOwner() {
require(msg.sender == owner, "Only owner can execute this function");
_;
}
constructor(uint256 _threshold) {
threshold = _threshold;
owner = msg.sender;
}
// Incrementar o decrementar el límite de eventos a guardar por cuenta
function setThreshold(uint256 _threshold) public onlyOwner {
threshold = _threshold;
}
// Crear nuevo evento
function createEvent(string memory _event) public returns (bool success) {
uint256 eventId = eventsCounter[msg.sender] + 1;
if (eventId > threshold) {
eventId = 1;
}
eventsCounter[msg.sender] = eventId;
events[msg.sender][eventId] = _event;
emit newEventCreated(_event);
success = true;
}
// Crear nueva alerta importante
function createAlert(Risk risk, string memory message) public returns (bool success) {
alerts.push(Alert(message, risk, msg.sender));
emit newAlertCreated(msg.sender, message, risk);
success = true;
}
}
La lógica del contrato podría dividirse entre eventos recurrentes y alertas más relevantes con diferentes niveles de riesgo. La acumulación hace que un equipo de seguridad informática tenga que estar pendiente de posibles ataques y tener la seguridad de que la información que están analizando es íntegra y confiable gracias a Blockchain.
El objetivo es poder analizar el comportamiento de los usuarios en búsqueda de ataques o comportamiento fuera de lo normal. Tecnologías como Elasticsearch u otras herramientas de monitoreo permiten obtener datos incluso de una Blockchain para llevar un análisis en tiempo real de lo que sucede en el sistema.
Así es como Blockchain hace sus aportes a la seguridad informática y permite tener un registro de eventos inmutable y confiable para analizar qué sucede en un sistema y anticipar posibles ataques.
Contribución creada por: Kevin Fiorentino.
Aportes 4
Preguntas 0
Geniales cursos, la metodologia con practicas es muy buena.
RESUMEN CLASE 10:
CASO PRACTICO
CIBERSEGURIDAD
REMIX:
Event.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
contract Event {
event newEventCreated(string _event);
mapping(address => mapping(uint256 => string)) public events;
mapping(address => uint256) public eventsCounter;
uint256 public threshold;
address private owner;
modifier onlyOwner() {
require(msg.sender == owner, "Only owner can execute this function");
_;
}
constructor(uint256 _threshold) {
threshold = _threshold;
owner = msg.sender;
}
function createEvent(string memory _event) public returns (bool success) {
uint256 eventId = eventsCounter[msg.sender] + 1;
if (eventId > threshold) {
eventId = 1;
}
eventsCounter[msg.sender] = eventId;
events[msg.sender][eventId] = _event;
emit newEventCreated(_event);
success = true;
}
function setThreshold(uint256 _threshold) public onlyOwner {
threshold = _threshold;
}
}
Es interesante utilizar un contrato inteligente como Log de eventos o errores para su posterior análisis. Existen implementaciones de Elasticsearch u otras herramientas de observabilidad para llevar un control de esos datos en tiempo real.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?