• Nenhum resultado encontrado

Algoritmos Criptográficos para Redes de Sensores

N/A
N/A
Protected

Academic year: 2022

Share "Algoritmos Criptográficos para Redes de Sensores"

Copied!
8
0
0

Texto

(1)

{mjunior, pbarreto} @larc.usp.br

Abstract. Networks that make intense use of constrained devices (such as sen- sors, tokens and smart cards) suffer from a low availability of computational resources and energy, thus hindering the deployment of many modern crypto- graphic algorithms. This study addresses this issue by proposing a novel symme- tric block cipher namedCurupira, designed with constrained platforms in mind.

We also describe two different key schedule algorithms that can be adopted by the cipher, and evaluate the security and performance of both constructions.

Resumo. Em redes altamente dependentes de dispositivos como sensores, to- kens e smart cards, o uso de diversos algoritmos criptogr´aficos modernos torna- se um desafio em raz˜ao da reduzida disponibilidade de recursos destas plata- formas. Visando resolver tal problema, este trabalho prop˜oe uma nova cifra de bloco sim´etrica, denominadaCurupira, projetada especialmente para platafor- mas com recursos limitados. Tamb´em s˜ao descritas duas estrat´egias de escalo- namento de chaves distintas que podem ser adotados pela cifra. Finalmente, a seguran¸ca e eficiˆencia dos algoritmos resultantes s˜ao avaliadas.

1. Introduc¸˜ao

Redes de Sensores Sem Fio (RSSF) podem ser consideradas como uma classe espe- cial de redes ad hoc na qual uma grande quantidade de n´os sensores de baixo custo interagem de forma cooperativa para captar e transmitir dados do ambiente que os cerca. O uso desta tecnologia permite o desenvolvimento de aplicac¸˜oes em diversas

´areas, como monitoramento clim´atico e de estruturas, vigilˆancia de ambientes, controle de sa´ude corporal, gerenciamento de emergˆencias e de operac¸˜oes militares, dentre ou- tros [Alemdar and Ibnkahla 2007]. Neste cen´ario, ´e importante garantir a integridade, autenticidade, e confidencialidade dos dados trafegados, prevenindo o vazamento de informac¸˜oes sigilosas (e.g., dados m´edicos) e tamb´em a injec¸˜ao de dados falsos na rede.

Apesar desta necessidade de seguranc¸a, RSSFs apresentam um grande desafio:

os n´os sensores comumente utilizados apresentam uma reduzida disponibilidade de re- cursos computacionais e de energia, impondo severas limitac¸˜oes no tipo de algoritmos criptogr´aficos que podem ser efetivamente usados em tais redes. Por outro lado, soluc¸˜oes criptogr´aficas de prop´osito geral, tipicamente adotadas em sistemas modernos, n˜ao res- pondem necessariamente de forma ´otima a este cen´ario. Assim, o desenvolvimento de algoritmos especialmente adaptados a estas necessidades espec´ıficas torna-se essencial.

Existe atualmente um n´umero consider´avel de arquiteturas de seguranc¸a voltadas a RSSFs. Uma das mais populares ´e o TinySec [Karlof et al. 2004], que atua na camada de enlace do TinyOS [Hill et al. 2000], considerado o sistema operacional padr˜aode facto

523

(2)

para RSSF. Como cifra padr˜ao, o TinySec escolheu o Skipjack [NSA 1998] devido a seu elevado desempenho (superior inclusive ao AES), comprovado em estudos bastante com- pletos como [Law et al. 2006]. No entanto, o Skipjack provˆe uma reduzida margem de seguranc¸a, j´a que o mesmo usa chaves relativamente pequenas (80 bits) e 31 de seus 32rounds podem ser criptanalizados com sucesso [Biham et al. 1999]. Este fato leva a preocupac¸˜oes com relac¸˜ao `a seguranc¸a de sistemas como o TinySec e outras arquiteturas que adotam o Skipjack como cifra padr˜ao, como o MiniSec [Luk et al. 2007] e o Sen- sec [Li et al. 2005]. J´a o AES [NIST 2001] ´e apontado em [Law et al. 2006] como uma poss´ıvel alternativa em cen´arios com elevada necessidade de seguranc¸a; por´em, o AES requer mais mem´oria de c´odigo, RAM e energia que diversos dos algoritmos considera- dos em [Law et al. 2006], al´em de ter um tamanho de bloco (128 bits) grande tendo em vista o reduzido tamanho de mensagens trafegadas em RSSFs.

Neste trabalho, apresentamos uma cifra de bloco dedicada denominada Curupira, desenvolvida especialmente para uso em redes de sensores e cen´arios com restric¸˜oes de recursos similares. Esta cifra opera sobre blocos de 96 bits e aceita chaves de 96, 144, ou 192 bits. O projeto da cifra combina a seguranc¸a da Estrat´egia de Tri- lha Larga [Daemen 1995] (utilizada na construc¸˜ao do pr´oprio AES) com o reduzido uso de mem´oria provido por uma estrutura involutiva1, mesmo quando as func¸˜oes de encriptac¸˜ao e decriptac¸˜ao s˜ao ambas necess´arias. O Curupira ´e bastante flex´ıvel em ter- mos de implementac¸˜ao, permitindo um compromisso entre velocidade e uso de mem´oria em func¸˜ao dos recursos dispon´ıveis na plataforma alvo. Finalmente, a cifra proposta apresenta duas vers˜oes distintas do algoritmo de escalonamento de chaves: a estrat´egia adotada no Curupira-1 ´e mais conservadora, provendo elevada difus˜ao (e, assim, em um n´ıvel de seguranc¸a superior) a um reduzido custo de mem´oria RAM; j´a no escalonamento do Curupira-2, tem-se uma que o n´umero de ciclos por byte processado ´e bem menor, com um uso de RAM ligeiramente maior e capacidade de difus˜ao menor.

As principais contribuic¸˜oes deste trabalho s˜ao, portanto: (1) a proposta de uma nova cifra sim´etrica, o Curupira; (2) o desenvolvimento de uma an´alise de seguranc¸a completa do Curupira, mostrando que o mesmo ´e seguro contra todos os ataques co- nhecidos; (3) a apresentac¸˜ao de t´ecnicas de otimizac¸˜ao para a cifra proposta; (4) a implementac¸˜ao e an´alise de desempenho do algoritmo, em comparado com outras ci- fras de interesse em RSSF, mostrando o elevado potencial do Curupiraem cen´arios com recursos limitados. O restante deste documento est´a organizado da seguinte forma. As ferramentas matem´aticas e notac¸˜ao b´asicas s˜ao introduzidas na sec¸˜ao 2. A estrutura de rounddo Curupira ´e detalhada na sec¸˜ao 3. As sec¸˜oes 4 e 5 descrevem os algoritmos de escalonamento de chaves do Curupira-1 e -2, respectivamente. Os resultados da an´alise de seguranc¸a da cifra s˜ao discutidos na sec¸˜ao 6. A sec¸˜ao 7 apresenta uma an´alise te´orica do desempenho dos algoritmos propostos, bem como os resultados experimentais obtidos.

A sec¸˜ao 8 apresenta as conclus˜oes do trabalho.

2. Preliminares matem´aticas e notac¸˜ao

O corpo finito GF(2n) ser´a representado como GF(2)[x]/pn(x), onde pn(x) ´e um pen- tanˆomio primitivo de grau n em GF(2)[x], i.e. deg(pn(x)) ≡ n. Neste documento , as multiplicac¸˜oes em GF(28) s˜ao feitas m´odulop8(x)= x8+x6+x3+x2+1. Esta escolha de

1Os processos de encriptac¸˜ao e decriptac¸˜ao s˜ao idˆenticos exceto pelo escalonamento de chaves.

(3)

p8(x) leva a uma forma particularmente simples para a raiz c´ubica primitiva do elemento unit´ario,c(x)= x85 mod p8(x)= x4+x3+x2.

Um elementou = u7x7+· · ·+uixi+· · ·+u0de GF(28) ondeui ∈ GF(2)[x] para todoi = 0, . . . ,7, ´e representado pelo seu valor num´erico u7 · 27+ · · ·+ ui · 2i +· · · + u0, escrito em notac¸˜ao hexadecimal. Assim, o polinˆomio c(x) se escreve 1C, enquanto p8(x) ´e representado como 14D. Denota-se por xtimes e ctimes, respectivamente, a multiplicac¸˜ao por xec(x). O conjunto dos vetores de 48tbits no corpo finito GF(248t) = GF(2)[x]/p48t(x) ´e denotadoUt, 26 t6 4. Portanto, todas as multiplicac¸˜oes em GF(248t) s˜ao feitas m´odulo um pentanˆomio primitivo p48t(x)∈GF(2)[x], definidos como: p96(x)= x96+x16+x13+x11+1; p144(x)= x144+x56+x53+x51+1; ep192(x)= x192+x43+x41+x40+1.

De modo similar, o conjunto de todas as matrizes 3×nem GF(2m) ´e representado porMn. SejamDeEas matrizes MDS [MacWilliams and Sloane 1977] a seguir:

D=









3 2 2 4 5 4 6 6 7









 , E =









1+c(x) c(x) c(x) c(x) 1+c(x) c(x) c(x) c(x) 1+c(x)









 .

3. Estrutura do C

URUPIRA

O Curupiraopera sobre blocos de 96 bits organizados como matrizesM4, mapeadas por colunas. A cifra aceita chaves de 96, 144 ou 192 bits, com um n´umero vari´avel derounds (ao menos 10). A func¸˜ao de round do Curupira ´e composta pelas seguintes operac¸˜oes auto-inversas (veja Figura 1), que d˜ao `a cifra seu car´ater involutivo:

• Camada n˜ao-linear(γ): Os bytes do bloco passam por uma S-box altamente n˜ao- linear, idˆentica `aquela usada na cifra de bloco Anubis[Barreto and Rijmen 2000];

• Camada de difus˜ao linear (θ): O bloco ´e multiplicado `a esquerda pela matriz MDS e involutivaD(definida na sec¸˜ao 2), resultando em difus˜ao intra-colunar;

• Camada de permuta¸c˜ao(π): Todos os bytes na segunda e terceira linhas do bloco s˜ao permutados conforme a regraπ(a)=b ⇔ bi,j =ai,i⊕j, 06i<3, 06 j<n;

• Camada de adi¸c˜ao de chave(σ): a sub-chave deround ´e combinada com o bloco por meio da operac¸˜ao bin´aria OU-exclusivo (XOR).

4. Escalonamento de chaves no C

URUPIRA

-1

O escalonamento de chaves do Curupira-1 ´e facilmente invert´ıvel e segue uma estrutura bastante similar `aquela ditada pela Estrat´egia de Trilha Larga, o que garante uma elevada capacidade de difus˜ao. Al´em disto, ela tem a vantagem de ser c´ıclica, de modo que a chave original ´e recuperada ap´os um certo n´umero derounds, dispensando a necessidade de armazenar qualquer sub-chave intermedi´aria durante a encriptac¸˜ao ou decriptac¸˜ao.

Nesta primeira construc¸˜ao, a chave de 48tbits, denotadaK (26 t 64) ´e interna- mente representada como uma matrizK ∈ M2t. A sub-chave Kn+1 ´e computada a partir de sua predecessoraKnpor meio de trˆes transformac¸˜oes (ilustradas na Figura 2):

• Adic¸˜ao de constante (σ(q)): um conjunto de constantes n˜ao-lineares, incremen- talmente tomadas da S-box, s˜ao combinadas com os bytes da primeira linha da sub-chave por meio de XOR; assim, para uma chave de 48tbits, a constante q(r)j dorthroundpara a coluna j´e dada por:q(0)j =0 eq(r)j = S[2t(r−1)+j], 0 6 j62t;

(4)

Figura 1. Estrutura de round do Curupira

• Deslocamento c´ıclico (ξ): rotaciona a segunda linha de uma posic¸˜ao para a es- querda, e a terceira linha de uma posic¸˜ao para a direita, mantendo a primeira linha inalterada;

• Difus˜ao linear (µ): a sub-chave ´e multiplicada `a esquerda pela matriz invert´ıvelE (definida na sec¸˜ao 2).

Figura 2. O escalonamento de chaves do Curupira-1

Finalmente, as chaves deround κ(r) efetivamente combinada com os blocos s˜ao computadas por meio do algoritmo de selec¸˜ao de chaves φr, o qual aplica a S-box aos bytes da primeira linha da sub-chaveKre trunca o resultado para 96 bits (i.e., o tamanho do bloco). Assim, apesar deφrn˜ao fazer parte do processo de evoluc¸˜ao das chaves em si, esta func¸˜ao introduz n˜ao-linearidade ao processo de escalonamento.

(5)

5. Escalonamento de chaves no C

URUPIRA

-2

O escalonamento de chaves no Curupira-2 tem a forma de um registrador de desloca- mento linear com retro-alimentac¸˜ao , no qual a sub-chave de 48t bits (2 6 t 6 4) ´e organizada como um vetor de 48t bits no corpo finito GF(248t) = GF(2)[x]/p48t(x). Os pentanˆomiosp48t usados pelo algoritmo s˜ao aqueles definidos na sec¸˜ao 2.

Este segundo algoritmo de escalonamento n˜ao apresenta um comportamento c´ıclico, mas ´e facilmente invert´ıvel, e tamb´em requer uma quantidade reduzida de RAM para armazenar sub-chaves; por exemplo, a primeira e a ´ultima chaves poderiam ser arma- zenada para pronta utilizac¸˜ao durante a encriptac¸˜ao ou decriptac¸˜ao, e uma pode ser obtida a partir da outra pelo mesmo (reduzido) custo. Entretanto, a principal vantagem deste algoritmo diz respeito ao seu desempenho, como ser´a mostrado na sec¸˜ao 7. Como no Cu- rupira-1, o escalonamento de chaves do Curupira-2 tamb´em envolve trˆes transformac¸˜oes para a gerac¸˜ao da sub-chaveKn+1a partir de sua predecessoraKn(veja Figure 3):

• Adic¸˜ao de constante (σ(q)): o byte mais significativo da sub-chave ´e combinado com uma das constantes de escalonamento, as quais s˜ao sequencialmente recupe- radas da S-box;

• Difus˜ao linear (ℵ): a sub-chave ´e multiplicada porx8na corpo finito GF(248t);

• Combinac¸˜ao linear (η): a metade mais significativa da sub-chave ´e linearmente combinada (via XOR) com a sua metade menos significativa.

Figura 3. O escalonamento de chaves do Curupira-2

As sub-chaves passam ent˜ao pelo algoritmo de selec¸˜ao de chaves φr, que toma os 12 bytes menos significativos de Kr, os mapeia na matrizM4 e aplica a S-box `a pri- meira coluna desta matriz, gerando a chave deround κ(r). Deste modo,φr introduz n˜ao- linearidade ao processo de escalonamento.

6. An´alise de seguranc¸a

A adoc¸˜ao da Estrat´egia de Trilha Larga, em combinac¸˜ao com uma S-box altamente n˜ao- linear, evita modalidades bem conhecidas de ataques (em especial ataques diferenciais e lineares), garantindo um elevado n´ıvel de seguranc¸a ao Curupira. Em nossas an´alises, nenhum ataque mais r´apido do que busca exaustiva foi encontrado para mais de 7rounds da cifra, um resultado corroborado pela an´alise de terceiros [Nakahara 2008].

(6)

7. Desempenho e resultados experimentais

A implementac¸˜ao do Curupira´e bastante flex´ıvel, podendo ser facilmente adaptada a di- ferentes cen´arios e recursos dispon´ıveis. As chaves deroundpodem ser computadas sob- demanda ou ent˜ao pr´e-armazenadas em uma tabela para r´apido acesso. Adicionalmente, todas as transformac¸˜oes da cifra envolvem apenas operac¸˜oes bastante simples, tais como indexac¸˜ao de tabelas, XORs e deslocamento de bytes, facilitando a sua implementac¸˜ao eficiente mesmo em plataformas com um reduzido conjunto de instruc¸˜oes. Por outro lado, em dispositivos modernos, estas operac¸˜oes podem ser aceleradas ainda mais usando tabelas com resultados intermedi´arios, e por meio de operac¸˜oes que se aplicam a colunas inteiras ao inv´es de byte-a-byte [Daemen and Rijmen 2002, section 4.1.1].

Uma an´alise meticulosa da estrutura do Curupira revela que, para R rounds, o custo da func¸˜ao deround ´e de apenas 3R−1 XORs, 2(R−1)/3 operac¸˜oes dextimese Rindexac¸˜oes de S-box por byte. Os processos de escalonamento de chaves e selec¸˜ao de chaves adicionam menos de 2/3 indexac¸˜oes de S-box, 1/3 operac¸˜oes dectimese 2 XORs por byte da chave e porround no Curupira-1, enquanto este custo cai para um m´aximo de 5/12 indexac¸˜oes de S-box, 5/8 XORs e 1/12 indexac¸˜oes de Stabela por byte de chave e porround no Curupira-2. Em comparac¸˜ao, o Skipjack requer basicamente 48 XORs e 16 indexac¸˜oes de tabela (F-table) por byte encriptado. Portanto, assumindo um custo igual para estas operac¸˜oes b´asicas e ignorando operac¸˜oes auxiliares (e.g., incrementos de contador), estima-se que o custo do Curupira-1 com chaves de 96 bits seja cerca de (45+ 26)/64 ≈ 108% do custo do Skipjack quando as chaves de round s˜ao calculadas sob-demanda; por outro lado, o custo do Curupira-2 com chaves de 96 bits corresponde a (45+7.5)/64≈ 82% do custo do Skipjack nas mesmas condic¸˜oes.

Para validar este resultado te´orico, o Skipjack e o Curupiracom chaves de 96 bits e sub-chaves computadas sob demanda foram implementados e avaliados em duas plata- formas de 8 bits: um micro-controlador RISC PIC18F8490 equipado com um processador de 8 MHz, 16 KiB de mem´oria de c´odigo e 768 bytes de RAM; e o simulador de sensor Avrora 1.6.0 [Titzer et al. 2004], simulando uma micro-controlador da s´erie ATmega128 com processador de 7.3 MHz, 128 KiB de mem´oria de c´odigo e 4 KiB de RAM. Al´em disto, foi tamb´em realizada uma comparac¸˜ao com entre AES, Skipjack e Curupiraem uma plataforma de 32 bits: um computador equipado com um Pentium 4 (3.2GHz) e 1 GiB de RAM. As Figuras 4 e 5 mostram os resultados obtidos.

Figura 4. Comparac¸ ˜ao entre Skipjack e Curupiraem plataformas de 8 bits.

Os resultados obtidos no PIC18F8490 mostram que o Curupira-2 requer≈18%

(7)

Figura 5. Comparac¸ ˜ao entre AES, Skipjack e Curupiraem plataforma de 32 bits.

menos ciclos de clock do que o Skipjack, enquanto o Curupira-1 ´e≈12% menos eficiente do que este ´ultimo, o que ´e similar ao teoricamente esperado. J´a no simulador Avrora, o Skipjack mostrou-se cerca de 30% e 4% mais r´apido do que o Curupira-1 e o Curupira-2, respectivamente, apesar de ter sido utilizado o mesmo c´odigo em C, o que indica certa influˆencia da plataforma e compilador sobre os resultados. Al´em disto, o uso observado de mem´oria de c´odigo e ROM (em bytes) foi: 1400 e 512 para o Curupira-1; 1500 e 512 para o Curupira-2; 1000 e 256 para o Skipjack. Com relac¸˜ao `a plataforma de 32 bits, o desempenho do AES e do Curupiracom um mesmo n´umero deroundsmostrou-se bastante similar, um resultado esperado em raz˜ao do uso de otimizac¸˜oes semelhantes e bem conhecidas para cifras que seguem a Estrat´egia de Trilha Larga. Por outro lado, o resultado bastante modesto do Skipjack (≈3 vezes mais lento do que o AES e o Curupira)

´e explicado pelo fato que o mesmo adota operac¸˜oes orientadas a 16 bits, que s˜ao atrativas para uso em processadores com instruc¸˜oes pequenas, mas tiram menor proveito do maior n´umero de bits dispon´ıveis em plataformas mais poderosas; j´a o AES e o Curupirapodem operar facilmente sobre palavras de 32 e 24 bits, respectivamente.

8. Conclus˜oes

Este documento apresentou o Curupira, uma nova cifra de bloco desenvolvida especial- mente para plataformas com recursos limitados, como RSSF. O Curupira foi projetado conforme a Estrat´egia de Trilha Larga, o que lhe garante um elevado n´ıvel de seguranc¸a.

O resultado ´e um algoritmo r´apido, compacto e flex´ıvel, fazendo do Curupira uma al- ternativa potencial para prover seguranc¸a em redes com recursos limitados, conforme demonstrado experimentalmente.

Pelo conjunto de suas caracter´ısticas, o artigo descrevendo o Curupira-1 recebeu menc¸˜ao honrosa na 25aedic¸˜ao do Simp´osio Brasileiro de Redes de Computadores e Siste- mas Distribu´ıdos (SBRC’07) [Barreto and Simplicio 2007]. Este documento ´e um resumo da dissertac¸˜ao de mestrado defendida junto `a Universidade de S˜ao Paulo, e dispon´ıvel em

‘www.teses.usp.br/teses/disponiveis/3/3141/tde-30092008-182545/’.

(8)

Referˆencias

Alemdar, A. and Ibnkahla, M. (2007). Wireless sensor networks: Applications and chal- lenges. 9th International Symposium on Signal Processing and Its Applications (ISSPA 2007), pages 1–6.

Barreto, P. and Simplicio, M. (2007). Curupira, a block cipher for constrained plat- forms. In Anais do 25o Simp´osio Brasileiro de Redes de Computadores e Sistemas Distribu´ıdos - SBRC 2007, volume 1, pages 61–74. SBC.

Barreto, P. S. L. M. and Rijmen, V. (2000). The Anubis block cipher. In First open NESSIE Workshop, Leuven, Belgium. NESSIE Consortium.

Biham, E., Biryukov, A., and Shamir, A. (1999). Cryptanalysis of skipjack reduced to 31 rounds using impossible differentials. In Advances in Cryptology – Eurocrypt’99, volume 1592 ofLecture Notes in Computer Science, pages 55–64. Springer.

Daemen, J. (1995).Cipher and hash function design strategies based on linear and diffe- rential cryptanalysis. Doctoral dissertation, Katholiek Universiteit Leuven.

Daemen, J. and Rijmen, V. (2002). The Design of Rijndael: AES – The Advanced En- cryption Standard. Springer, Heidelberg, Germany.

Hill, J., Szewczyk, R., Woo, A., Hollar, S., Culler, D., and Pister, K. (2000). System ar- chitecture directions for networked sensors. InArchitectural Support for Programming Languages and Operating Systems, pages 93–104.

Karlof, C., Sastry, N., and Wagner, D. (2004). Tinysec: a link layer security architecture for wireless sensor networks. In2nd International Conference on Embedded Networ- ked Sensor Systems – SenSys’2004, pages 162–175, Baltimore, USA. ACM.

Law, Y. W., Doumen, J., and Hartel, P. (2006). Survey and benchmark of block ciphers for wireless sensor networks.ACM Transactions on Sensor Networks (TOSN), 2(1):65–93.

Li, T., Wu, H., Wang, X., and Bao, F. (2005). SenSec design. Technical report, InfoComm Security Department.

Luk, M., Mezzour, G., Perrig, A., and Gligor, V. (2007). Minisec: A secure sensor network communication architecture. InIPSN’07: Proc. of the 6th international con- ference on Information processing in sensor networks, pages 479–488.

MacWilliams, F. J. and Sloane, N. J. A. (1977). The theory of error-correcting codes, volume 16. North-Holland Mathematical Library.

Nakahara, J. (2008). Analysis of Curupirablock cipher. InAnais do 8oSimp´osio Brasi- leiro em Seguran¸ca da Informa¸c˜ao e Sistemas Computacionais.

NIST (2001). Federal Information Processing Standard (FIPS 197) – Advanced En- cryption Standard (AES). National Institute of Standards and Technology. http:

//csrc.nist.gov/publications/fips/fips197/fips-197.pdf.

NSA (1998). Skipjack and KEA Algorithm Specifications, version 2.0. National Security Agency.

Titzer, B., Lee, D., and Palsberg, J. (2004). Avrora scalable simulation of sensor networks with precise timing. Center for Embedded Network Sensing Posters - Paper 93.

Referências

Documentos relacionados

O exposto acima recai sobre a ideia abordada no Caderno EJA 1“Alunas e alunos da EJA” (BRASIL, 2006, p.11), revelando a realidade da EJA: “Os alunos buscam a escola para satisfazer

5 “A Teoria Pura do Direito é uma teoria do Direito positivo – do Direito positivo em geral, não de uma ordem jurídica especial” (KELSEN, Teoria pura do direito, p..

O valor da reputação dos pseudônimos é igual a 0,8 devido aos fal- sos positivos do mecanismo auxiliar, que acabam por fazer com que a reputação mesmo dos usuários que enviam

Algumas sementes e castanhas vão ficar só nessa etapa de hidratação pois já passaram por um processo térmico no caso de algumas castanhas e nozes, outras sementes descascadas

Apesar dos esforços para reduzir os níveis de emissão de poluentes ao longo das últimas décadas na região da cidade de Cubatão, as concentrações dos poluentes

Chora Peito Chora Joao Bosco e Vinicius 000 / 001.. Chão De Giz Camila e

Para defender uma ideia de forma completa (uma tese), é preciso desenvolver muitos argumentos. Inclusive, cada argumento requer uma série de elementos, dados

O Plano de Manutenção dos Monumentos é uma ferramenta de gestão e de conservação preventiva que tem os seguintes objetivos: melhorar a gestão de recursos (reduzindo custos a