V. Infraestrutura de Segurança de Grades (GSI)

           5.1) Política de Segurança em Grades Computacionais

           Antes de permearmos as especificidades da GSI, é importante identificarmos os objetivos da segurança, ou seja, devemos definir uma “Política de Segurança”, um conjunto de regras que define as relações entre os sujeitos da grade (como os usuários) e os objetos da mesma (como os recursos). Apesar de diversas políticas serem possíveis, será apresentada aquela que leva em conta os requisitos e os problemas evidenciados nos tópicos anteriores, a fim de solucioná-los. Tendo estes preceitos em mente, segue a política de segurança:
           • O ambiente da grade computacional consiste em diversos domínios confiáveis. Isto fica claro uma vez que a política de segurança da grade deve abarcar uma coleção heterogênea de recursos e usuários administrados localmente,

           • Operações que são confinadas a um único domínio confiável estão sujeitas unicamente a política de segurança local. Fica claro isto uma vez que não são impostos pela política de segurança de grades operações ou serviços de segurança em operações locais,
           • Existem sujeitos (i.e. usuários) locais e globais. Para cada domínio confiável, existe um mapeamento parcial de sujeitos globais para locais. De fato, cada usuário dos recursos terá dois nomes, um global e um potencialmente diferente nome local em cada recurso. O mapeamento do nome global para o nome local é específico de cada local. A existência de um nome global permite a provisão de login único.
           • Operações entre entidades localizadas em domínios de segurança diferentes requerem autenticação mútua.
           • Um sujeito (i.e. usuário) autenticado globalmente mapeado em um sujeito local é tido como equivalente a estar localmente autenticado como sujeito local. Em outras palavras, a combinação da política de autenticação da grade e o mapeamento local asseguram o objetivo de segurança do domínio hospedeiro.
           • Todas as decisões de controle de acesso são realizadas localmente no domínio do sujeito local. Essa política requer basicamente que as decisões de controle de acesso permaneçam com os administradores dos sistemas locais.
           • Um programa ou processo pode atuar sob a possessão de um usuário e possuir parte dos direitos do usuário. Essa política é necessária para possibilitar a execução de programas que tomam grande tempo para serem executados e que podem adquirir recursos dinamicamente sem intervenção adicional do usuário. Ela também é necessária para permitir a criação de processos a partir de outros processos.
           • Processos rodando sob o mesmo sujeito no mesmo domínio de segurança podem compartilhar as mesmas credenciais. Essa política possibilita a escalabilidade da arquitetura de segurança para aplicações paralelas de larga-escala, evitando a necessidade de criar uma única credencial para cada processo.

           Vale ressaltar que a política de segurança evidenciada foi estruturada de modo a não necessitar de privacidade em massa, isto é, encriptação, por razão alguma. Isto se deu pois as leis de controle de exportação que visam às tecnologias de encriptação são complexas, dinâmicas e variam de país para país. Como as grades computacionais podem ter dimensões internacionais, foi necessário observar este aspecto. Por fim, observa-se que esta política possibilita a integração de diversas políticas de segurança locais encontradas em um ambiente de grades. Definida as políticas da GSI, podemos enfim partir para a definição especifica da própria.

           5.2) Arquitetura de Segurança de Grades Computacionais

           Rotinas de grades podem aumentar e diminuir dinamicamente, adquirindo recursos quando necessário e liberando-os quando não são mais necessários. Cada vez que uma rotina obtém um recurso, ela o faz a partir de um usuário especifico. Todavia, é freqüentemente impraticável para o usuário interagir diretamente com cada um dos recursos para realizar a autenticação, uma vez que o número de recursos envolvidos pode ser enorme ou mesmo porque algumas aplicações podem ser executadas por um extenso período de tempo, como semanas. Assim, segue o conceito de Proxy de Usuário, que pode agir conforme um usuário sem requerer a sua intervenção.

           Proxy de Usuário: Um Proxy de usuário é um processo controlador de sessão que tem permissão para agir conforme o usuário por um período de tempo limitado. O Proxy de usuário possui suas próprias credenciais, eliminando a necessidade de o usuário estar online durante a execução da rotina e eliminando a necessidade de ter as credenciais do usuário para cada operação de segurança. Além disso, como o tempo de vida do Proxy está sob controle do usuário e pode ser limitado para a duração da rotina, as conseqüências de segurança deste Proxy são mínimas.

           Seguindo o conceito de Proxy de usuário acima introduzido, segue abaixo o conceito de Proxy de Recursos, que se dá de maneira análoga ao Proxy de Usuário.

           Proxy de Recursos: Um Proxy de Recursos é um agente utilizado para realizar a tradução entre operações de segurança interdominios e mecanismos locais.

           Dados os sujeitos e objetos, a arquitetura é determinada pela especificação dos protocolos utilizados quando sujeitos e objetos interagem. Quando da definição dos protocolos, que segue abaixo, serão utilizadas

algumas notações, sendo elas U, R e P para referirem-se a Usuário, Recurso e Processo respectivamente, além de PU e PR para Proxy de Usuário e Proxy de Recurso. Muitos dos protocolos que seguem dependerão da habilidade de garantir que certos dados são originários de uma fonte conhecida X, sem modificações. Sabemos que estas condições são verdadeiras quando estes estão “assinados” por X. Para esta assinatura, será utilizada a notação Sig(X){text}. Tendo estas notações definidas, seguem os protocolos.

           5.3) Protocolo de Criação de Proxy de Usuário

           Este protocolo permite ao usuário logar no sistema da grade computacional, criando o Proxy de Usuário. Segue o protocolo para tal:
            1. O usuário possui acesso ao computador a partir do qual o Proxy de Usuário será criado, utilizando qualquer forma de autenticação local localizada no computador em questão.
           2. O usuário produz a credencial do Proxy de Usuário, C(PU), usando sua própria credencial, C(U), para assinar uma tupla contendo o id de usuário, o nome do hospedeiro local, a validade de C(PU) e outras informações requeridas pelo protocolo de autenticação usado para implementar a arquitetura, como uma chave-pública.

           C(PU)=Sig(U){id, hospedeiro, hora de inicio, hora de fim, informação de autenticação}

           3. Um processo de Proxy de Usuário é criado e concedido com C(PU). A integridade de C(PU) fica a cargo da política de segurança local no computador no qual o Proxy está localizado.

           5.4) Protocolo de Alocação de Recursos

           Este protocolo permite que um Proxy de Usuário aloque recursos e crie processos. Segue o protocolo para tal:
            1. O PU e o PR autenticam-se usando C(PU) e C(PR). Como parte do processo, o PR certifica-se que as credenciais do PU não expiraram.
           2. O PU envia um pedido ao PR assinado na forma Sig(PU){especificação da alocação}
           3. O PR verifica se o usuário que assinou as credencias do Proxy de Usuário está autorizado por políticas locais a requisitar alocação de recursos.
           4. Em caso positivo, o PR cria a tupla de Credenciais do Recurso contendo o nome do usuário para o qual o recurso está sendo alocado, o nome do recurso, entre outros.
           5. O PR envia de forma segura as Credenciais do Recurso para o PU, sendo isto possível devido ao primeiro passo.
           6. O PU examina o pedido das Credenciais do Recurso e se desejar aprová-lo, assina a tupla para produzir C(P), uma credencial para o recurso requisitado.
           7. O PU envia seguramente C(P) para o PR, sendo isto possível novamente graças ao primeiro passo.
           8. O PR aloca o recurso e passa o(s) novo(s) processo(s) C(P).

           5.5) Alocação de Recursos a partir de um Protocolo de Processo

           Este protocolo permite que um processo criado possa alocar recursos adicionais diretamente. Segue o protocolo para tal:
           1. O processo e o seu PU autenticam-se usando C(P) e C(PU).
           2. O processo envia um pedido assinado para o seu PU, na forma
Sig(P){ “alocar”, parâmetros do pedido de alocação}.
           3. Se o PU aceitar o pedido de alocação, ele inicia o pedido de alocação de recursos para o PR especificado usando o protocolo de alocação de recursos.
           4. O processo resultante é assinado pelo PU e retornado ao processo requerente.

           5.6) Protocolo de Registro de Mapeamento

           Este protocolo permite definir o mapeamento local de um sujeito a partir do seu mapeamento global. Segue o protocolo para tal:

           1.a. O PU autentica-se com o PR.
           1.b. O PU envia o pedido de Mapeamento do Sujeito do Proxy do Usuário assinado para o PR, que tem como argumentos os nomes do sujeito global e local.
            2.a. O usuário loga no recurso usando o método de autenticação do recurso e inicia o processo de registro do mapeamento.
           2.b. O processo de registro de mapeamento envia o pedido de Mapeamento do Sujeito do Processo assinado para o PR, que tem como argumentos os nomes do sujeito global e local.
           1. O PR espera pelo pedido de ambos os mapeamentos com os argumentos iguais.
           2. O PR verifica que o processo de registro de mapeamento pertence ao sujeito especificado na requisição de mapeamento.
           3. Caso ambos os argumentos dos pedidos de mapeamento sejam iguais, o PR inicia o mapeamento e envia as informações ao Proxy de Usuário e ao Processo de Registro de Mapeamento.
           4. Se os argumentos dos pedidos de mapeamento não forem tidos como iguais dentro do tempo limite do mapeamento o PR elimina os pedidos e envia a informação à entidade que requisitou o mapeamento.
           5. Se não for recebida nenhuma informação dentro do tempo limite do mapeamento, é considerado que a requisição falhou.